使用Azure Active Directory Oauth进行Azure Service Management API身份验证

时间:2014-09-23 20:05:54

标签: azure oauth cloud

我想通过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;不可用。

enter image description here

我错过了什么?

2 个答案:

答案 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/并执行命令。

请务必安全保存生成的凭据数据。