当前位置: 首页 > 知识库问答 >
问题:

使用Azure Active Directory Oauth的Azure服务管理API身份验证

汤枫
2023-03-14

我想通过curl使用Azure AD对Azure服务管理API进行身份验证。

我在默认目录中设置了一个应用程序。在这个免费试用版中,这是我仅有的目录。

当我以oauth令牌endpoint为目标时,我收到一个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>

我已将应用程序的服务管理API的权限授予为“委派权限”,因为“应用程序权限”不可用。

我错过了什么?

共有2个答案

秦德海
2023-03-14

事实证明,无法通过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/并执行命令。

请确保安全地保存生成的凭据数据。

贺兴昌
2023-03-14

这是不可能的,因为服务管理API的应用程序权限:0设置。client_凭据授予类型使用来自应用程序的凭据(client_id和client_secret),并且由于应用程序没有此API的权限,因此调用失败。

由于服务管理API不允许任何类型的应用程序权限,因此我们必须使用authorization_code grant类型或其他方法来获取用户令牌。

 类似资料:
  • 我需要一些有关Azure API管理服务的帮助。 目前,我们有一个单页应用程序,它使用Azure上托管的两个后端服务(WebApi.NETCore)。为了对用户进行身份验证和授权,我们使用IdentityServer(也作为服务托管在Azure上)SubscriptionService。在这里,IdSrv对用户进行身份验证,并定义webapp可以访问哪些api。如果用户拥有给定API的权限,Sub

  • 我的公司正在调查关于Azure的报道。我们只希望我们的客户给我们只读凭据供我们使用。我做了一些研究,看起来Azure Active Directory就是这么做的。因此,我希望使用只读Azure Directory应用程序进行身份验证。 为了让我开始,我关注了这个关于通过Azure Active Directory使用管理API的博客。 https://msdn.microsoft.com/en-

  • 我正在尝试在一个microservice中配置一个microservice,但我正在尝试在另一个microservice中配置一个microservice如何进行身份验证。这就是我试图归档的体系结构: 我已经设法让用户授权工作并保护了微服务A,现在我正在尝试授权来自微服务B的请求,但我不确定如何做到这一点,我是否应该为微服务B在KeyCape中创建一个专用用户,或者在realm中创建客户端,或者其

  • 我能够使用JavaSDK成功连接到资源管理API。 连接成功后,我是否可以继续使用ARM在订阅级别列出资源,如操作系统图像、位置、区域等?还是需要再次切换到服务管理API?每个操作都可以使用新的ARM API吗?

  • 我们需要从Azure应用程序服务和Azure功能运行访问Azure服务总线(ASB)的应用程序。我们需要使用用户指定的身份进行身份验证。我们编写以下代码,用于系统分配的标识,但不用于用户分配的标识: 引发此错误: 所以核心错误是找不到指定ClientId/ResourceId的MSI 。看起来我们需要指定客户端id。然后我们发现https://github.com/Azure/azure-sdk-

  • 除了用户名和密码(例如来自ACS的令牌)之外,是否还有其他使用AMQP对Azure服务总线进行授权的方法? 在我的场景中,我希望能够在不公开凭据的情况下为资源级客户端提供对服务总线的访问权限。