开发者工具 · JWT 解码器
ID 令牌与访问令牌:为什么 OpenID Connect JWT 不是 API 密钥
· 背景
jwt oauth 身份验证
两者可能都是来自同一提供商的 JWT,但它们回答不同的问题。这篇文章解释了 ID 令牌和访问令牌各自包含什么、谁应该使用它们以及如何通过解码来区分它们。
API 拒绝看起来完全有效的令牌 - 因为它从来就不是为 API 设计的
API 可以拒绝格式正确、签名正确的令牌,因为该凭证是为另一个使用者和目的颁发的。 “这是一个JWT”描述了一种可能的格式,而不是允许将其发送到任何地方。 ID 令牌和访问令牌回答身份流中的不同问题。
ToolAcre 可以公开支持调试的标头和有效负载模式,但它无法验证令牌或验证 OpenID Connect 配置文件。最终的分类必须来自提供商合同、发行流程和可信验证结果,而不是目视检查。
ID 令牌声明可能暗示身份使用;此通用解码器不验证 OpenID Connect 配置文件
ID 令牌将身份验证信息传递给请求登录的客户端。根据配置文件,可见声明可能包括随机数、身份验证时间、身份验证方法或与另一个令牌相关的哈希值。这些字段不是通用 API 授权。
解码器将 `auth_time` 视为时间形状字段,并将其他名称显示为特定于应用程序的名称,除非它们属于其核心七个名称。它不验证随机数、`at_hash`、`amr` 或客户端受众语义。可读的身份有效负载在客户端正确验证之前保持不可信状态。
访问令牌可以是 JWT 或不透明的;只有三部分 JWT 适合此解码器
访问令牌授权对授权系统下的资源服务器的调用。它可能是 JWT 或不透明字符串。只有由三部分组成的签名形状适合 ToolAcre 的路线;不透明令牌没有可解码的通用客户端结构,因此不应强制通过此工具。
JWT 访问令牌可以携带受众和范围信息,但这些值需要经过身份验证的验证和资源策略。浏览器面板不实现资源服务器,并且无法判断范围是否允许特定操作。
刷新令牌 — 通常是不透明的,永远不会被解码,也永远不会发送到 API
刷新令牌支持根据提供商规则获取替换访问凭据。它通常是不透明的,不适用于资源 API。它也是一个高价值的凭证,因此将其粘贴到解码器中会产生风险,而不会带来可靠的诊断益处。
不要推断每个令牌形状的值都应该被解码。使用提供程序工具和受控日志来处理刷新失败。 ToolAcre 对生产令牌的明确警告在这里特别适用,并且其三段解析器不提供刷新操作。
受众不同 — ID 令牌中的客户端 ID 与访问令牌中的资源
受众是一个强有力的线索,因为目标消费者不同。 ID 令牌通常以客户端为目标,而访问令牌以资源为目标。确切的标识符和表示形式取决于提供程序和配置文件,因此本文并未发明通用字符串模式。
标头 `typ` 也可以提供显式标签,但在验证之前它仍然是令牌控制的数据。仅当字符串 `typ` 与 `JWT` 不同时,ToolAcre 才会发出警告;它无法识别每个配置文件标签或将其转化为授权决定。
工作示例:比较可见字段而不将它们视为令牌类型的证明
解码两个综合示例:一个携带面向客户端的身份验证声明,另一个携带资源受众和范围。记录 `aud`、`typ` 和有效负载名称中的差异。该练习教的是向发行人询问什么,而不是如何证明任一示例的身份。
伪造的令牌可以复制相同的标签,而真实的令牌可以使用特定于提供者的约定。从发布响应和文档中确认类型,然后与目标消费者进行验证。解码器的输出是支持证据,而不是决定权威。
这不包括什么 - 发出这些令牌的 OAuth 流程,这是一个单独的主题
此比较不解释授权代码、设备或其他颁发令牌的流程。它还不涵盖特定于提供商的验证步骤、不透明的访问令牌自省或刷新轮换。这些主题取决于所选的生态系统和部署。
缩小直接调试问题的范围:客户端收到了哪个凭证,谁是其目标消费者,以及哪个可信组件验证了它?回答这三个问题可以防止通用 JWT 形状擦除协议角色。
要点:在发送之前查看 aud 和typ — ToolAcre JWT 解码器可让您检查您持有哪种令牌
在发送令牌之前查看受众和类型,但在验证成功之前不要信任任何一个字段。 ID令牌属于其客户端验证边界;访问令牌属于其资源服务器。刷新令牌属于提供者的刷新过程,而不是 API。
ToolAcre 帮助阅读安全的三部分示例,但不声称对它们进行分类或验证。使用它来发现可能的错误,然后让记录的流程和独立配置的验证程序确定凭证的真正用途。