azure - 无法从 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 令牌)。我还能如何解决这个问题?
解决方案
吉姆的回答是正确的,并且确实有 2 个用例 - 所以这取决于您要做什么:
获取 Microsoft 资源(例如 Graph)的访问令牌,在这种情况下,您无需验证它们
为您自己的 API 资源获取令牌,在这种情况下,您需要验证它们。为此,您需要“公开 API 范围”以获取不同类型的访问令牌
在我看来,行为并不直观,因为我喜欢构建基于标准的解决方案。如果有帮助,这里是我的一篇关于使上述第二个场景正常工作的可视化博客文章。
推荐阅读
- python - 将“conda activate env_name”的输出保存到批处理文件中的变量
- php - 这些文件位于 sleay32.dll 和 libeay32.dll 的什么位置?
- javascript - Gulp 和 Webpack 流不适用于 Imports
- sql - 修剪 SQL 中的前导 0
- java - JPA中使用persist()后类似executeUpdate的方法
- aws-sdk - 无法从假设角色 aws 获得凭证
- php - 使用 cURL 获取响应更新 Laravel 数据库表
- pandas - pytorch闪电海王星上传pandas数据框错误
- powershell - 使用 PowerShell 选择特定的 Excel 列以导出到另一个电子表格
- bash - 当管道输出到文件并且需要清理时,svn commit 挂起