我想通过curl使用Azure AD对Azure Service Management API进行身份验证。
我的默认目录中的set up an application。在这个免费试用订阅中,这是我唯一的目录。
当我定位oauth令牌端点时,我会收到JWT。
curl --data "grant_type=client_credentials&client_id=<my_client_id>&client_secret=<my_encoded_secret>&resource=https%3A%2F%2Fmanagement.core.windows.net" https://login.windows.net/<my_tenant_id>/oauth2/token
但是当我使用该令牌列出我的订阅详情时,我收到一个错误:
curl -H "x-ms-version: 2014-06-01" \
-H "Authorization: Bearer <my_token>" \
https://management.core.windows.net/<my_subscription_id>/
<Error xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Code>ForbiddenError</Code>
<Message>The server failed to authenticate the request. Verify that the certificate is valid and is associated with this subscription.</Message>
</Error>
我已将应用程序的Service Management API的权限授予&#34;委派权限&#34;,因为&#34;应用程序权限&#34;不可用。
我错过了什么?
答案 0 :(得分:1)
由于Service Management API的应用程序权限:0 设置,这是不可能的。 client_credentials grant类型使用来自应用程序的凭据(client_id和client_secret),并且由于应用程序没有此API的权限,因此调用失败。
由于Service Management API不允许任何类型的应用程序权限,因此我们必须使用authorization_code grant type或其他方法来获取用户令牌。
答案 1 :(得分:0)
事实证明,无法通过 Azure 门户 API 配置 Azure 服务管理 API 权限。
完整的解决方案在这里:
https://blog.jongallant.com/2021/02/azure-rest-apis-postman-2021/
解决方案在于使用 Azure CLI 创建已分配权限的服务主体。
az ad sp create-for-rbac
您可以直接进入https://shell.azure.com/并执行命令。
请务必安全保存生成的凭据数据。