我有一个使用 Azure AD 提供对资源的访问的 API。它具有一个范围 api://{client_id}/Api.Read
和以下 API 权限:
用户.阅读.全部,
用户.阅读。
当我从 AD 收到访问 token 时,它只有一个 aud - {client_id} ,并且当我尝试访问 Microsoft graph 时(例如 https://graph.microsoft.com/v1.0/me
) 我收到“访问 token 验证失败。受众无效。”响应符合预期。
我的问题是 - 是否可以使用一个 token 访问图形 API 和我的 API 以及如何实现?
最佳答案
我正在使用代表调用将当前 token 交换为“正确的” token :https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow
基本上,您只需进行以下调用(从上面的链接复制):
POST /oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com/<YOUR_TENANT>
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&requested_token_use=on_behalf_of
&client_id=<YOUR_CLIENT_ID>
&client_secret=<YOUR_CLIENT_SECRET>
&assertion=<YOUR_CURRENT_TOKEN>
&scope=<YOUR_NEW_SCOPES>
响应包含用于访问范围内请求的资源的新 token 。我的情况不完全是您的情况,但我认为这也适合您的情况。您需要在服务器端进行此调用。
这假设用户已经同意您的应用程序可以使用
关于azure - 是否可以使用自定义受众访问 microsoft graph?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74114624/