Azure AD 在有效访问 token 上返回 Authentication_ExpiredToken

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

我收到您的访问 token 已过期。请在提交请求之前续订。当我调用 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. 我在 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 您的访问 token 已过期。请在提交请求之前续订。
  6. 我成功向任何 Microsoft Graph 端点发出请求,因此 access_token 有效。

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

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

我做错了什么?

谢谢!

最佳答案

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

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

如果我拥有一个 API“WebAPI1”,并且我获得了一个 token ,其中受众是其他内容,例如“WebAPI2”,我应该拒绝该 token ,并且不向客户端提供对我的 API 的访问权限。此行为的原因应该是显而易见的,但如果不进行此检查,则会导致重大安全问题。

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

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

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

请告诉我这是否有帮助!

关于Azure AD 在有效访问 token 上返回 Authentication_ExpiredToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49192583/

相关文章:

Azure WebJobs - 多个 Web 应用程序 - 单个存储帐户冲突

angularjs - Web api 2 oauth2 过期滑动

azure - 如何将 Azure Ad B2C 登录集成到我的 Electron React 应用程序中?

azure - 从守护程序应用程序访问受 oAuth2 保护的 Azure Function

Azure - 随着时间的推移预测

facebook - ACS/Facebook 集成 - ACS40001 : An error occurred while attempting to get an access token from Facebook

json - 测试 Azure 解决方案模板的 createUIDefinition.json 文件的最简单方法是什么?

ssl - 将 OpenID 与 SSL 和金融交易结合使用的安全方面

ruby-on-rails - 使用 oAuth2 gem 和 facebook 的 OpenSSL 问题

azure - 无法在 Outlook 加载项应用程序中获取 sso token