Authn.tech
首页
  • SAML 2.0
  • OAuth 2.0
  • OIDC
  • JWT / JOSE
  • WebAuthn / Passkey
  • MFA / TOTP
  • LDAP
  • 国内平台 SSO
  • 工具总览
  • JWT 解析
  • JWT 签名
  • JWK 生成
  • JWK → PEM
  • PEM → JWK
  • PKCE 生成
  • OIDC Discovery
  • 扫码登录演示
  • TOTP
  • WebAuthn
  • SAML 编解码
  • SAML Metadata
  • SAML Response
  • 飞书 SAML
  • X.509 证书
  • PEM 解析
  • Base64URL
  • LDAP 过滤器
  • 概览 / 角色术语
  • OIDC Mock
  • SAML Mock
  • 邮件服务器
  • LDAP 目录
  • OIDC 登录演示
  • SAML 登录演示
  • 微信扫码登录
  • 企业微信扫码登录
  • 简体中文
  • English
  • Deutsch
GitHub
首页
  • SAML 2.0
  • OAuth 2.0
  • OIDC
  • JWT / JOSE
  • WebAuthn / Passkey
  • MFA / TOTP
  • LDAP
  • 国内平台 SSO
  • 工具总览
  • JWT 解析
  • JWT 签名
  • JWK 生成
  • JWK → PEM
  • PEM → JWK
  • PKCE 生成
  • OIDC Discovery
  • 扫码登录演示
  • TOTP
  • WebAuthn
  • SAML 编解码
  • SAML Metadata
  • SAML Response
  • 飞书 SAML
  • X.509 证书
  • PEM 解析
  • Base64URL
  • LDAP 过滤器
  • 概览 / 角色术语
  • OIDC Mock
  • SAML Mock
  • 邮件服务器
  • LDAP 目录
  • OIDC 登录演示
  • SAML 登录演示
  • 微信扫码登录
  • 企业微信扫码登录
  • 简体中文
  • English
  • Deutsch
GitHub
  • JWT / JOSE

    • JWT 概述
    • 核心概念
    • 参数与 Claims 参考

JWT 概述

JWT(JSON Web Token,RFC 7519)是一种通用的、与场景无关的令牌格式:把一组声明(claims)打包成一个紧凑、可签名/可加密、可安全放进 URL 的字符串。它本身不关心你拿它做什么——认证、授权、服务间传递上下文都可以用。

JWT 的"户口":它既不属于 OAuth 2.0,也不属于 OIDC

这是最常见的误解。JWT 是 IETF 定义的独立标准,属于一个更大的密码学规范家族 JOSE(JSON Object Signing and Encryption):

规范编号作用
JWSRFC 7515JSON Web Signature —— 签名(防篡改)
JWERFC 7516JSON Web Encryption —— 加密(防泄露)
JWKRFC 7517JSON Web Key —— 密钥的 JSON 表示
JWARFC 7518JSON Web Algorithms —— 上述规范可用的算法(RS256、ES256、A256GCM 等)
JWTRFC 7519JSON Web Token —— 用 JWS/JWE 承载 claims 的令牌

OAuth 2.0 与 OIDC 只是借用了 JWT 这个格式,并没有"拥有"它:

              JWT / JOSE   ← 独立的令牌与密码学格式标准(IETF)
                   ↑ 被用作实现手段
        ┌──────────┴──────────┐
    OAuth 2.0               OIDC
    (授权框架)         (在 OAuth2 之上加认证层)
    对 JWT:可选          对 ID Token:强制 JWT
  • OAuth 2.0(RFC 6749):不规定 token 格式。access token 可以是随机串,也可以是 JWT(JWT 化有专门的 RFC 9068)。JWT 对 OAuth2 是可选的实现选择。
  • OIDC:唯一"强制用 JWT"的地方——ID Token 必须是 JWT。这也是 OIDC 相对 OAuth2 引入的核心新东西之一。

一句话记忆

JWT 是被 OAuth2 / OIDC 借用的通用格式。OAuth2 对它"可选",OIDC(仅 ID Token)对它"必选"。 你完全可以在与二者无关的场景(服务间签名数据、API 网关传上下文)里用 JWT。

JWS 与 JWE:签名 ≠ 加密

日常说的"JWT"绝大多数是 JWS(签名的),它有三段:

Header.Payload.Signature
  • Header 与 Payload 只是 Base64URL 编码,不是加密——任何人都能解码看到内容。JWS 保证的是完整性(内容没被篡改),不是机密性。
  • 因此:不要把密码、密钥等敏感信息放进 JWS 的 payload。需要机密性时才用 JWE(五段结构,内容被真正加密)。

绝大多数认证/授权场景(ID Token、access token)用的都是 JWS。本站文档若不特别说明,"JWT" 均指 JWS 形态。

三段结构一览

以一个 RS256 签名的 JWT 为例:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjQtMDEifQ   ← Header
.eyJpc3MiOiJodHRwczovL29wLmV4YW1wbGUuY29tIiwic3ViIjoiMTIzNCJ9  ← Payload
.NHVaYe26MbtOYhSKkoKYdFVomg4i8ZJd8_-RU8VNbftc4TSMb4b...          ← Signature
段内容说明
Header{"alg":"RS256","typ":"JWT","kid":"2024-01"}签名算法 alg、类型 typ、密钥标识 kid
Payload{"iss":...,"sub":...,"exp":...}claims 集合(见 参考速查)
Signature对 base64url(header) + "." + base64url(payload) 的签名用 Header 里 alg 指定的算法计算,防篡改

解码 ≠ 验证

JWT 的前两段只是编码,谁都能解。只有验签通过、且 iss/aud/exp 等声明校验通过后,里面的内容才可信。详见 核心概念 · 验签流程。可用本站 JWT 解析器 现场解码与验签。

本章导航

  • 核心概念 —— 三段结构详解、签名算法、验签流程与常见坑;OIDC 三种 Token(ID / Access / Refresh)分别是不是 JWT;Refresh Token 如何判断失效
  • 参数与 Claims 参考 —— 注册声明速查、alg 取值表、Base64URL 说明、相关 RFC 索引

相关工具

  • JWT 解析器 —— 解码三段、时间校验、验签
  • JWT 签名生成 —— 造测试 token
  • JWK 生成 / Base64URL 编解码
最近更新: 2026/7/9 18:21
贡献者: linux, Claude Opus 4.8
Next
核心概念