首页 > 解决方案 > 无法从 Microsoft Graph API 成功验证访问令牌

问题描述

我正在使用 Microsoft Graph API 和 Microsoft 身份验证库 (MSAL) 来获取访问令牌,并且我可以成功检索访问令牌、id 令牌和刷新令牌。我还可以成功验证id token。但是,我不能对访问令牌做同样的事情,因为我收到了这个错误:

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

我已经尽我所能查看了有关验证的 microsoft 文档: Microsoft 身份平台访问令牌

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

我正在使用以下 url 中的公钥,如下所述:

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

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

标签: azureazure-active-directorymicrosoft-graph-apiaccess-token

解决方案


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

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

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

在我看来,行为并不直观,因为我喜欢构建基于标准的解决方案。如果有帮助,这里是我的一篇关于使上述第二个场景正常工作的可视化博客文章。


推荐阅读