好的,我可能在Angular中缺少一些简单的东西,但是我确实可以使用一些帮助。我试图以编程方式向订阅授予服务主体READER角色。如果我使用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>" }}
答案 0 :(得分:0)
好的,我终于弄明白了这里发生了什么。看来我发布到了错误的端点。我需要发布到roleAssignment而不是roleDefinitions。
那么为什么它在PostMan中起作用?在使用旧版客户端时,似乎以前版本的API都提供了支持,而后者却由于某种原因而被PostMan淘汰了。但是,当通过Angular发布时,它正在积极拒绝它。
最终结果...发送到API版本晚于“ api-version = 2015-07-01”的“ /Microsoft.Authorization/roleassignments/”。都可以。