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

Abd*_*utt 12 authentication api azure

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

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

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

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

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

Joe*_*Cai 9

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

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

转到门户网站,找到您subscription,点击Access Control (IAM),然后点击Add role assignmentcorrespond service principal您可以使用它获得令牌。

成功授予权限后,刷新并重试。


Nis*_*nga 6

我运行时也遇到同样的错误

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Run Code Online (Sandbox Code Playgroud)

不久之后我就这样做了az login。问题是我没有正确设置我的订阅所以我要做的就是运行,

az account set --subscription your-subscription-id
Run Code Online (Sandbox Code Playgroud)

之后az aks get-credentials工作正常,错误消失,您将得到类似的输出,

Merged "myAKSCluster" as current context in C:\Users\UserName\.kube\config