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

时间:2018-03-09 11:18:19

标签: azure oauth-2.0 azure-active-directory access-token

当我呼叫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有效。
  7. 根据这篇文章:https://docs.microsoft.com/azure/active-directory/develop/active-directory-appmodel-v2-overview,我可以使用此访问令牌同时访问Microsoft Graph APIAzure AD Graph API

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

    我做错了什么?

    谢谢!

1 个答案:

答案 0 :(得分:9)

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

当您从Azure AD查看访问令牌时,有一个名为aud的参数代表“受众”。此属性告知接收令牌的API是该令牌的有效受众。

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

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

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

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

请告诉我这是否有帮助!