azure - 无法成功验证来自 Microsoft Graph API 的访问 token

标签 azure azure-active-directory microsoft-graph-api access-token

我正在使用 Microsoft Graph API 和 Microsoft 身份验证库 (MSAL) 来获取访问 token ,并且我可以成功检索访问 token 、ID token 和刷新 token 。我还可以成功验证 id token 。但是,我无法对访问 token 执行相同的操作,因为我收到此错误:

raise InvalidSignatureError('Signature verification failed')
jwt.exceptions.InvalidSignatureError: Signature verification failed

我已尽可能详细地查看了有关验证的微软文档: Microsoft identity platform access tokens

对于验证,我可以使用 jwt.ms 站点进行 jwt 验证成功解码。所以我知道代币很好。我可以从解码声明中看到并提取 aud(受众)和 iss(发行人)。这些值与 id token 不同(我可以成功验证)。

我正在使用记录中的以下网址中的公钥:

https://login.microsoftonline.com/<TENANT ID>/discovery/keys

那么,我在验证访问 token 方面缺少什么? (如果我可以毫无问题地验证 id token )。我还能如何解决此问题?

最佳答案

吉姆的答案是正确的,并且确实有 2 个用例 - 所以这取决于您想要做什么:

  • 获取 Microsoft 资源(例如 Graph)的访问 token ,在这种情况下您无需验证它们

  • 获取您自己的 API 资源的 token ,在这种情况下您需要验证它们。为此,您需要“公开 API 范围”以获取不同类型的访问 token

在我看来,行为并不直观,因为我喜欢构建基于标准的解决方案。如果有帮助,这里是 visual blog post of mine让上面的第二个场景工作起来。

关于azure - 无法成功验证来自 Microsoft Graph API 的访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63941878/

相关文章:

java - 将 Azure AD 身份验证与 AWS 中托管的现有基于 Java 的 Web 应用程序集成的可能选项?

c# - 如何使用 MS Graph API 获取组织中的所有部门

asp.net - Azure ACS 身份验证如何确保安全?

azure-active-directory - Powerbi 嵌入式身份验证选项是什么?

azure - Azure APIM 产品在无需订阅的情况下如何与多个产品配合?

powershell - 从 powershell 获取当前用户的 Azure Active Directory 资源访问 token ?

microsoft-graph-api - 在 Microsoft Graph API 中获取个人帐户的邮箱别名不起作用

microsoft-graph-api - token 中需要存在 scp 或角色声明

java - Azure cosmosdb 异步java中的理想 "RequestOptions"值?

azure - 使用 dapper 和数据仓库进行批量数据处理