0

好的,我可能在 Angular 中遗漏了一些简单的东西,但我真的可以使用一些帮助。我正在尝试以编程方式将服务主体读者角色授予订阅。如果我使用 PostMan,它可以正常工作。但是,当我通过 Angular6 发送相同的 PUT 请求时,我从 Azure 收到 400 错误,上面写着:

您的请求内容无效,无法反序列化原始对象。异常消息:在 JSON 中找不到“必需属性”权限。路径“属性”,第 1 行,位置 231。

在这两种情况下发送的 JSON 是:

{
    "properties": 
    { 
        "roleDefinitionId":"/subscriptions/{some_subscription_guid}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7",
        "principalId":"{some_service_provider_guid}" 
    }
}

我已经从两个请求中捕获了流量,它们在 PUT 上显示为 application/json 有效负载。因此,我不知道通过 Azure 错误地反序列化导致此错误的原因。我正在尝试遵循此处记录的 REST 说明:https ://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-rest

有什么我想念的想法吗?

更新

为每个请求添加 RAW REQUEST。我已经替换了任何敏感数据(访问令牌、GUID 等),而没有更改 Fiddler 输出中的任何其他内容。

PUT https://management.azure.com/subscriptions/<VALID_SUBSCRIPTION_WAS_HERE>/providers/Microsoft.Authorization/roleDefinitions/7ec2aca1-e4f2-4152-aee2-68991e8b48ad?api-version=2015-07-01 HTTP/1.1
Host: management.azure.com
Connection: keep-alive
Content-Length: 233
Accept: application/json, text/plain, */*
Origin: http://localhost:4200
Authorization: Bearer <VALID_TOKEN_WAS_HERE>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-Type: application/json
Referer: http://localhost:4200/token/<VALID_DOMAIN_WAS_HERE>.onmicrosoft.com/graph
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

{"properties": { "roleDefinitionId":"/subscriptions/<VALID_SUBSCRIPTION_GUID_HERE>/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7", "principalId":"<VALID_OBJECTID_HERE>" }}
4

1 回答 1

0

好吧,我终于弄清楚这里发生了什么。看来我发布到了错误的端点。我需要发布到角色分配而不是角色定义。

那么为什么它在 PostMan 中起作用呢?似乎在使用旧客户端时支持这两种 API 的以前版本的 API 有一个回退,由于某种原因 PostMan 落入了。但是,当通过 Angular 发布时,它会主动拒绝它。

最终结果...发送到“/Microsoft.Authorization/roleassignments/”,API 版本高于“api-version=2015-07-01”。一切都会奏效。

于 2018-07-17T00:08:56.347 回答