我正在尝试使用“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
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
好的,现在您可以使用 token 来访问您的资源了。
关于azure - 通过客户端 AAD 检索的客户端凭据 token 在 API Azure 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62383550/