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

Kos*_*tyn 4 azure access-token oauth-2.0 azure-active-directory

Your access token has expired. Please renew it before submitting the request.当我呼叫https://graph.windows.net/myorganization/oauth2PermissionGrants?api-version=1.5端点时,我正在接收.

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

测试案例:

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

根据这篇文章:https://docs.microsoft.com/azure/active-directory/develop/active-directory-appmodel-v2-overview,我可以使用此访问令牌来访问Microsoft Graph API以及Azure AD Graph API.

所以,我正在使用适用于这些的v2.0:https://docs.microsoft.com/azure/active-directory/develop/active-directory-protocols-oauth-code.

我做错了什么?

谢谢!

Sha*_*izi 14

用于调用Microsoft Graph的令牌不能用于调用Azure AD Graph API.

当您查看Azure AD中的访问令牌时,会有一个名为aud"audience" 的参数.此属性告知接收令牌的API是该令牌的有效受众.

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

aud为微软图表值https://graph.microsoft.com/,而aud对于Azure的AD图形API是https://graph.windows.net/.

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

这里的解决方案是为不同的API获取不同的访问令牌,您的问题应该得到解决.

如果这有帮助,请告诉我!