我正在尝试使用“ 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。
答案 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
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
好的,现在您可以使用令牌访问资源了。