【问题标题】:Azure AD returns Authentication_ExpiredToken on valid access tokenAzure AD 在有效访问令牌上返回 Authentication_ExpiredToken
【发布时间】:2018-08-17 22:56:21
【问题描述】:

当我调用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_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 APIAzure AD Graph API

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

我做错了什么?

谢谢!

【问题讨论】:

  • 嗯,我找不到您可以将令牌用于两个 API 的信息。我也没有读到任何提到你可以使用 v2 的 Azure AD Graph :) OAuth 权限授予应该可以从 MS Graph 的 beta 端点获得,所以你需要访问它吗?
  • 来自docs.microsoft.com/en-us/azure/active-directory/develop/… Active Directory (Azure AD) 使用 OAuth 2.0 使您能够授权访问 Azure AD 租户中的 Web 应用程序和 Web API。本指南与语言无关,描述了如何在不使用我们的任何开源库的情况下发送和接收 HTTP 消息。
  • 我不想使用 beta 端点。我想使用 msdn.microsoft.com/en-us/library/azure/ad/graph/api/…
  • 该文档适用于 v1。您正在使用 v2。
  • 好吧,我还没有尝试过 :) 两个 API 之间确实有一些范围重叠,但通常每个 API 都需要一个令牌,因为令牌中的受众设置为始终以一个 API 为目标。跨度>

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


【解决方案1】:

用于调用 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 的 aud 值为 https://graph.windows.net/

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

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

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

【讨论】:

  • 感谢您的精彩解释!现在完全清楚了。唯一让我感到困惑的是反应。它不能正确表示问题。
  • 完全同意,但我们需要有关您的身份验证的更多详细信息(如原始令牌和请求跟踪),以了解它是身份验证错误还是其他检查发生之前出现的错误.例如,如果在某个时候图表同时检查过期和 aud,但首先过期并且您的令牌已过期,那么它会抛出第一个错误而不查看所有其余部分......只是一个假设
猜你喜欢
  • 2021-12-26
  • 2020-12-21
  • 2021-10-26
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 2023-01-26
  • 2019-08-31
  • 2019-08-25
相关资源
最近更新 更多