授予 READER 角色对 Azure 中订阅的访问权限在 Postman 中工作正常,但不能通过 Angular。为什么?

Granting READER role access to a Subscription in Azure works fine in Postman, but not via Angular. Why?

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

The content of your request was not valid, and the original object could not be deserialized. Exception message: 'Required property 'permissions' not found in JSON. Path 'properties', line 1, position 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>" }}

好吧,我终于明白这是怎么回事了。看来我发布到错误的端点。我需要发布到 roleAssignment 而不是 roleDefinitions。

那么为什么它在 PostMan 中有效?似乎在使用遗留客户端时支持两者的 API 的先前版本有一个回退,由于某种原因 PostMan 落入了。然而,当通过 Angular 发帖时,它却主动拒绝了。

最终结果...发送到“/Microsoft.Authorization/roleassignments/”,API 版本晚于 "api-version=2015-07-01"。一切正常。