授权Azure AD应用程序访问RateCard API

时间:2016-08-03 13:26:41

标签: api azure oauth billing

由于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个角色。

enter image description here

我还在应用清单的Admin部分添加了appRoles个角色。

enter image description here

并添加所有可能的应用权限:

enter image description here

要调用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'"

但我仍然有这个错误。

如何将此授权添加到我的应用程序中?

这里是我的应用权限的截图:

enter image description here enter image description here

enter image description here

2 个答案:

答案 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

然后,您可以将此自定义角色分配给您的应用程序。