我收到您的访问 token 已过期。请在提交请求之前续订。
当我调用 https://graph.windows.net/myorganization/oauth2PermissionGrants?api-version=1.5
端点时。
为了防止出现任何愚蠢的问题 - 是的,我知道建议使用 Microsoft Graph
而不是 Azure AD Graph
。我知道它并且我正在使用它。但对于我当前的情况,我需要准确请求 Azure AD Graph
。
测试用例:
- 我成功登录
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=....
并获取code
在回复中。 - 我在
https://login.microsoftonline.com/common/oauth2/v2.0/token
上成功交换代码
并获取access_token
>. - 我成功向任何
Microsoft Graph
端点(即https://graph.microsoft.com/education/me/classes
)发出请求。 - 我调用
https://graph.windows.net/myorganization/oauth2PermissionGrants?api-version=1.5
。 - 我收到错误
Authentication_ExpiredToken
您的访问 token 已过期。请在提交请求之前续订。
- 我成功向任何
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/