由于Azure OAuth 2发生了变化,我发现错误:
The client 'xxx' with object id 'xxx' does not have authorization to perform action 'Microsoft.Commerce/RateCard/read' over scope '/subscriptions/xxx'.
我已关注role-based assignment instructions,为我的应用程序Reader
添加了DefaultResourceGroupResource
个角色。
我还在应用清单的Admin
部分添加了appRoles
个角色。
并添加所有可能的应用权限:
要调用RateCard API,我会检索一个令牌:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" "https://login.windows.net/xxx.onmicrosoft.com/oauth2/token" -d "grant_type=client_credentials&client_id=xxx&client_secret=xxx"
我在请求中使用它:
curl -H "Authorization: Bearer <token>" "https://management.azure.com/subscriptions/xxxproviders/Microsoft.Commerce/RateCard?api-version=2015-06-01-preview&$filter=OfferDurableId eq 'MS-AZR-0003P' and Currency eq 'USD' and Locale eq 'en-US' and RegionInfo eq 'US'"
但我仍然有这个错误。
如何将此授权添加到我的应用程序中?
这里是我的应用权限的截图:
答案 0 :(得分:4)
在与Azure支持人员进行简短的通话后,他们告诉我这种权限无法通过门户处理,必须在PowerShell中完成。
所以我必须下载运行的Windows 10虚拟机:
登录Azure帐户:
Login-AzureRmAccount
添加权限:
New-AzureRMRoleAssignment -ServicePrincipalName "<my-app-id>" -RoleDefinitionName "Reader" -Scope "/subscriptions/<my-subscription-id>"
检查是否正确分配了权限:
Get-AzurermRoleAssignment -ServicePrincipalName "<my-app-id>"
答案 1 :(得分:1)
我已经按照基于角色的分配说明,添加了一个Reader 我的应用程序对DefaultResourceGroupResource的作用。
不要在单个资源组上授予Reader
角色权限,请尝试在订阅级别上提供相同的权限。
您可以做的另一件事是在订阅中使用以下权限创建自定义角色:
Microsoft.Commerce/RateCard/read
Microsoft.Commerce/UsageAggregates/read
然后,您可以将此自定义角色分配给您的应用程序。