azure - 通过客户端 AAD 检索的客户端凭据 token 在 API Azure 上不起作用

标签 azure azure-active-directory

我正在尝试使用“client_credentials”grant_type通过客户端AAD详细信息(clientid、客户端 key )连接到API,我能够获取具有API范围的 token ,但是当我使用该 token 检索API结果时,我得到401 未经授权的错误。

我试图了解 API AAD 上需要什么样的权限才能让客户端 AAD 接受 token 。请帮助我理解这一点。

以下是 AAD 上的权限:

API AAD:

User.Read -> 委托(delegate) -> 登录并读取用户个人资料

客户端 AAD:

用户模拟->委托(delegate)->FOR API AAD

Microsoft Graph - 委托(delegate)、应用程序 ->User.Read.All

谢谢

迪帕克。

最佳答案

如果您使用客户端凭据流获取访问 token ,则必须创建应用程序并向该应用程序授予应用程序权限(这是因为客户端凭据流没有用户交互)。

在此之前,您需要了解委派权限和应用程序权限之间的区别:

应用程序权限允许 Azure Active Directory 中的应用程序充当其自己的实体,而不是代表特定用户。

委派权限允许 Azure Active Directory 中的应用程序代表特定用户执行操作。

然后您需要通过编辑 api 应用程序列表来定义应用程序权限。 here就是一个例子。

请参阅此文档并使用客户端凭据流程获取访问 token here :

1.首先需要获得管理员的同意:

GET https://login.microsoftonline.com/{tenant}/adminconsent?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=http://localhost/myapp/permissions

enter image description here

2.然后您可以通过共享 secret 来获取访问 token :

POST /{tenant}/oauth2/v2.0/token HTTP/1.1           //Line breaks for clarity
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials

enter image description here

解析 token ,您将看到您的自定义角色: enter image description here

好的,现在您可以使用 token 来访问您的资源了。

关于azure - 通过客户端 AAD 检索的客户端凭据 token 在 API Azure 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62383550/

相关文章:

azure - 使用Rust调用Azure Storage Queue Rest API

ios - 使用 ADAL 进行身份验证 - 注销问题

WebAPI2 中的 Azure AD 图形请求

Azure Active Directory 授权 "The access token is from the wrong issuer '

node.js - 如何使用 ADAL 和 MFA 登录 AAD

c# - 从 Stream 上传 Blob,带有选项但不覆盖

azure - 有没有办法让 Azure DevOps Code Review 不立即发表评论?

asp.net - 导航至网站并设置声明

php - fatal error : Call to undefined function sqlsrv_connect() using wamp php 5. 5.12

azure - 导出为 PFX 时 Azure 应用服务证书的密码是什么?可以改变吗?