Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Azure中授予订阅的读者角色访问权在Postman中可以正常工作,但不能通过Angular。为什么?_Azure_Typescript_Azure Active Directory_Azure Resource Manager_Azure Rbac - Fatal编程技术网

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

在Azure中授予订阅的读者角色访问权在Postman中可以正常工作,但不能通过Angular。为什么?,azure,typescript,azure-active-directory,azure-resource-manager,azure-rbac,Azure,Typescript,Azure Active Directory,Azure Resource Manager,Azure Rbac,好的,我可能在Angular中遗漏了一些简单的东西,但我真的需要一些帮助。我试图以编程方式将服务主体读取器角色授予订阅。如果我用邮递员的话,效果很好。然而,当我通过Angular6发送相同的PUT请求时,我从Azure收到一个400错误,该错误表示: 请求的内容无效,原始对象无效 无法反序列化。异常消息:“必需的属性” 在JSON中找不到“权限”。路径“属性”,第1行,位置 231.“ 在这两种情况下发送的JSON是: { "properties": { "r

好的,我可能在Angular中遗漏了一些简单的东西,但我真的需要一些帮助。我试图以编程方式将服务主体读取器角色授予订阅。如果我用邮递员的话,效果很好。然而,当我通过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反序列化错误导致了这个错误。我尝试按照此处记录的其他说明进行操作:

你知道我遗漏了什么吗

更新

为每个请求添加原始请求。我已经替换了任何敏感数据(访问令牌、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>" }}
PUThttps://management.azure.com/subscriptions//providers/Microsoft.Authorization/roleDefinitions/7ec2aca1-e4f2-4152-aee2-68991e8b48ad?api-版本=2015-07-01 HTTP/1.1
主持人:management.azure.com
连接:保持活力
内容长度:233
接受:application/json、text/plain、*/*
来源:http://localhost:4200
授权:持票人
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/67.0.3396.99 Safari/537.36
内容类型:application/json
推荐人:http://localhost:4200/token/.onmicrosoft.com/graph
接受编码:gzip,deflate,br
接受语言:en-US,en;q=0.9
{“属性”:{“roleDefinitionId”:“/订阅//providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7”,“principalId”:“}

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

那为什么它在《邮递员》中起作用呢?在使用旧客户机时,API的前一个版本似乎支持这两种功能,但由于某种原因,PostMan受到了限制。然而,当通过Angular发布时,它积极地拒绝了它


最终结果。。。发送至“/Microsoft.Authorization/roleassignments/”且API版本晚于“API version=2015-07-01”。所有这些都会起作用。

Postman会根据指定的有效负载和内容类型进行隐式编码/字符转换。事实上,它在邮递员工作意味着你的角度有效载荷必须略有不同。使用Fiddler或Postman的代理功能捕获这两个请求,并在这两个请求之间使用比较工具,包括headersYa,我使用Fiddler检查了主体,它们都显示相同的JSON负载。浏览器和桌面邮递员应用程序之间确实有不同的标题,但这不重要。还有一个postman标签头,但是Azure应该忽略它。从angular发布您的整个
请求。使用Fiddler inspector中的
Raw
选项卡。您可以去掉/隐藏授权标题。好的@astaykov,我已经用请求的原始Fiddler转储更新了原始问题。有什么不合适的吗?