标头
通常包含 typ(类型,常为 "JWT")和 alg(签名算法)。也可能包含 kid 以从 JWKS 选择公钥,或堆栈所需的其他元数据。
RFC 7519 · JSON Web Signature
JSON Web Token(JWT)是一项开放标准(RFC 7519),将声明表示为紧凑、URL 安全的字符串。它常与 OAuth 2.0 和 OpenID Connect 一起使用,但格式本身是通用的:任何持有正确验证材料的一方都可以校验签名并理解其中的声明——在密钥与时钟管理的限制之内。
本页说明 JWT 如何构建、如何阅读各部分,以及仅凭令牌本身可以期待哪些保证、哪些不能。
紧凑形式:由点分隔的三个 Base64URL 段。
在常见形式(JSON Web Signature,JWS)中,JWT 由点分隔的三段组成:标头、载荷和签名。前两段是使用 Base64URL(非标准 Base64)编码的 JSON 对象:通常省略填充并使用 URL 安全字符,以便放入标头与查询字符串。
Base64URL 不是加密。任何持有字符串的人都能读取标头与载荷。签名证明前两段由控制签名密钥的一方生成;并不隐藏其内容。
在紧凑 JWS 形式中,各段作用如下:
通常包含 typ(类型,常为 "JWT")和 alg(签名算法)。也可能包含 kid 以从 JWKS 选择公钥,或堆栈所需的其他元数据。
包含声明的 JSON 对象:主体、有效期、受众与应用特定字段。若签发者定义,也允许嵌套对象。
对 "header.payload" 字节(两段编码与中间的点)的密码值,使用标头中的算法与共享密钥(HMAC)或非对称私钥(RSA、ECDSA、EdDSA)。
声明是键值对。其含义取决于上下文,但 RFC 7519 定义了一组注册名称,以便库与 API 一致解释。
常见示例包括 iss、sub、aud、exp、nbf、iat、jti。exp 与 nbf 为 Unix 时间戳;正确验证需要验证方有可信时钟。
名称可在 IANA「JSON Web Token Claims」注册表登记以获得广泛互操作,但在生产者与消费者就语义达成一致前仍只是约定。
签发者与消费者约定的名称(例如内部角色或租户标识)。除非完全控制双方,否则避免与注册名称冲突。
标头中的 alg 决定签名计算方式。选择错误的模型会影响谁可以验证以及如何共享密钥。
有效签名表明令牌由控制签名密钥的一方签发,且标头与载荷未被篡改。它本身并不加密任何内容。
请勿在载荷中存放密码、API 密钥或其他长期机密。若除签名外还需保密,请在传输层使用 TLS,并考虑 JWE——另一种格式与工作流。
服务器应使用预期密钥或 JWKS 验证签名,检查 exp(通常还有 nbf),在架构依赖时强制执行 aud 与 iss,并在适当时使用短寿命与刷新流程。
JWT 常用于:
使用 JWT 设计时的实用约束: