具有对象ID的客户端无权在范围内执行操作“ Microsoft.Web / serverfarms / read”

时间:2019-10-09 10:34:23

标签: azure api authentication

我正在使用Azure应用服务api来查看服务器详细信息(例如工作进程和区域等)以进行管理。从 AuthenticationContext.AcquireTokenAsync 方法生成令牌后,我正在请求以下URL以获取服务器详细信息 https://management.azure.com/subscriptions/<sub ID> / resourceGroups / <资源组名称> /providers/Microsoft.Web/serverfarms /?api-version = 2018-02-01

在响应中,我收到 AuthorizationFailed 错误代码,并在下面给出了详细信息:

  

客户端无权在范围'/subscriptions/xxxxxxxx-xxxxxxx-xxxx/resourceGroups/xxxxxxxxxxx/providers/Microsoft.Web/serverfarms/xxxx'或范围内执行操作'Microsoft.Web / serverfarms / read'是无效的。如果最近授予访问权限,请刷新您的凭据。

但是,当我尝试使用 https://docs.microsoft.com/en-us/rest/api/appservice/appserviceenvironments/get 门户进行相同的验证时,可以在该门户中尝试进行测试的API,该请求将返回预期的结果。

那么,还有其他方法可以进行身份​​验证吗?还是我必须定义一些权限才能实现此功能?

2 个答案:

答案 0 :(得分:0)

您使用的服务主体在该租户中没有权限。

租户具有订阅,服务主体属于租户。 Azure资源管理器还公开了给定主体的基于角色的授权,这将为其授予对Azure资源的权限。看来服务主体无权读取该订阅。

转到门户网站并找到您的subscription,单击Access Control (IAM),然后单击Add role assignment,然后使用correspond service principal来获取令牌。

获得成功的权限后,请刷新并重试。

答案 1 :(得分:0)

我遇到了同样的问题。最初,我继续向我的用户添加了“Web 计划贡献者”角色,因为它应该处理这些事情。什么都没有改变 - 我仍然有这个错误。

结果是一个错误的资源组...结果证明我复制了一些旧脚本,其中 WebAppPlans 位于单独的 RG 中,并且我正在那里搜索应用程序计划。完全误导性错误。我想即使 App Plan 根本不存在,它也会显示相同的错误消息。