Azure AD 返回有效访问令牌上的Authentication_ExpiredToken



当我调用端点时,我https://graph.windows.net/myorganization/oauth2PermissionGrants?api-version=1.5得到Your access token has expired. Please renew it before submitting the request.

为了防止任何愚蠢的问题 - 是的,我知道建议使用Microsoft Graph而不是Azure AD Graph.我知道它,我正在使用它。但是对于我目前的情况,我需要准确要求Azure AD Graph.

测试案例:

  1. 我成功登录https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=....并在响应中得到code
  2. 我成功地交换了code,并在https://login.microsoftonline.com/common/oauth2/v2.0/token上获得了access_token.
  3. 我成功地向任何Microsoft Graph端点(即https://graph.microsoft.com/education/me/classes)发出请求。
  4. 我打电话给https://graph.windows.net/myorganization/oauth2PermissionGrants?api-version=1.5.
  5. 我收到错误Authentication_ExpiredTokenYour access token has expired. Please renew it before submitting the request.
  6. 我成功地向任何Microsoft Graph端点发出请求,因此access_token有效。

基于这篇文章:https://learn.microsoft.com/azure/active-directory/develop/active-directory-appmodel-v2-overview,我可以使用此访问令牌访问Microsoft Graph APIAzure AD Graph API

所以,我正在使用v2.0,它应该适用于那些:https://learn.microsoft.com/azure/active-directory/develop/active-directory-protocols-oauth-code。

我做错了什么?

谢谢!

用于调用Microsoft图形的令牌不能用于调用 Azure AD 图形 API。

查看来自 Azure AD 的访问令牌时,有一个名为aud的参数,它代表"受众"。此属性告知接收令牌的 API 该令牌的有效受众。

如果我拥有一个 API"WebAPI1",并且我得到一个令牌,其中受众是其他东西,例如"WebAPI2",我应该拒绝该令牌,并且不让客户端访问我的 API。此行为的原因应该是显而易见的,但如果此检查未发生,则会导致重大安全问题。

Microsoft图的aud值为https://graph.microsoft.com/,而 Azure AD 图形 API 的audhttps://graph.windows.net/

请求访问令牌时,需要使用scopes参数指定需要令牌的特定资源。可以在此处找到此信息以及更多信息。

此处的解决方案是为不同的 API 获取不同的访问令牌,您的问题应该得到解决。

让我知道这是否有帮助!

最新更新