我正在使用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,该请求将返回预期的结果。
那么,还有其他方法可以进行身份验证吗?还是我必须定义一些权限才能实现此功能?
答案 0 :(得分:0)
您使用的服务主体在该租户中没有权限。
租户具有订阅,服务主体属于租户。 Azure资源管理器还公开了给定主体的基于角色的授权,这将为其授予对Azure资源的权限。看来服务主体无权读取该订阅。
转到门户网站并找到您的subscription
,单击Access Control (IAM)
,然后单击Add role assignment
,然后使用correspond service principal
来获取令牌。
获得成功的权限后,请刷新并重试。
答案 1 :(得分:0)
我遇到了同样的问题。最初,我继续向我的用户添加了“Web 计划贡献者”角色,因为它应该处理这些事情。什么都没有改变 - 我仍然有这个错误。
结果是一个错误的资源组...结果证明我复制了一些旧脚本,其中 WebAppPlans 位于单独的 RG 中,并且我正在那里搜索应用程序计划。完全误导性错误。我想即使 App Plan 根本不存在,它也会显示相同的错误消息。