通过客户端AAD检索到的客户端凭据令牌无法在API Azure上运行

时间:2020-06-15 07:42:00

标签: azure azure-active-directory

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

我正在尝试了解API AAD要求什么样的权限才能使客户端AAD接受令牌。请帮助我理解这一点。

以下是两个AAD的权限:

API AAD:

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

客户AAD:

模拟用户->委托-> FOR API AAD

Microsoft Graph-委派的应用程序-> User.Read.All

谢谢

Deepak。

1 个答案:

答案 0 :(得分:1)

如果使用Client Credential流获取访问令牌,则必须创建一个应用程序并向该应用程序授予应用程序许可权(这是因为Client Credential流没有用户交互)。

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

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

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

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

请参阅本文档,并使用客户端凭据流程获取访问令牌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。然后,您可以通过共享密码来获取访问令牌:

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

解析令牌,您将看到自定义rolesenter image description here

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