JWT 剖析:标头、载荷与签名
解码 base64url 部分,并理解 JWT 的每个字段
JWT 剖析:标头、载荷与签名 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
什么是 JWT
JSON Web 令牌(JWT)是一种在 RFC 7519 中定义的紧凑、适合 URL 使用的令牌格式。它将声明(关于某个主体的断言)和密码学签名编码在一个字符串中,从而支持无状态身份验证。
三部分结构
JWT 的形式为:base64url(header).base64url(payload).base64url(signature)。句点用于分隔各个部分。标头和载荷可以读取(经过 base64url 编码,但未加密)。只有签名部分涉及密码学运算。
标头
标头是一个 JSON 对象:{"alg":"HS256","typ":"JWT"}。alg 指定签名算法(HS256、RS256、ES256、none)。typ 始终为 "JWT"。其他标头还包括用于选择密钥的 kid(密钥 ID)。
载荷与声明
标准注册声明包括:iss(颁发者)、sub(主体)、aud(受众)、exp(过期时间的 Unix 时间戳)、nbf(生效时间)、iat(签发时间)和 jti(用于吊销的 JWT ID)。自定义声明可以是任意其他键值对。
解码 JWT
import base64, json token = "eyJ..." parts = token.split(".") header = json.loads(base64.urlsafe_b64decode(parts[0]+"==")) payload = json.loads(base64.urlsafe_b64decode(parts[1]+"==")) print(header, payload)
签名验证
对于 HS256:HMAC-SHA256(base64url(header)+"."+base64url(payload), secret)。接收方会重新计算该值,并将其与签名部分进行比较。如果两者匹配且令牌未过期,则令牌有效。
非对称签名
对于 RS256,私钥使用 RSA-SHA256 为 header.payload 字符串签名。任何拥有公钥的一方都可以在不持有私钥的情况下进行验证。公钥通过 JWKS(JSON Web 密钥集)端点分发,例如 /.well-known/jwks.json。
Base64url 编码
Base64url 将 + 替换为 -,将 / 替换为 _,并省略 = 填充。这使 JWT 可以安全地用于 URL、HTTP 标头和 cookie,而无需进行百分号编码。原始字节仍未加密,只是经过编码。
JWT 默认不加密
任何人都可以对 JWT 载荷进行 base64url 解码并查看其内容。除非使用 JWE(JSON Web 加密)以及 "enc" 算法进行实际加密,否则绝不要将秘密(密码、SSN)放入 JWT 载荷。
令牌有效期
应将 exp 设置为较短的时长(访问令牌通常为 15–60 分钟)。长期有效的 JWT 会累积风险:一旦被盗,在过期前始终有效。请使用安全存储的刷新令牌来签发新的短期访问令牌。
JWKS 发现
身份验证提供商(Auth0、Keycloak、Google)会发布 JWKS URL。验证方根据 kid 获取公钥并进行缓存,因此无需针对每个请求联系颁发方即可验证签名。密钥轮换会更新 JWKS 端点。
快速检查
JWT 的哪一部分包含密码学签名?
回顾
JWT 由三个经过 base64url 编码的 JSON 部分组成:标头(算法)、载荷(声明)和签名。载荷可读取,并未加密。下一步:在 HS256 和 RS256 之间进行选择。
用 AI 导师学习 Cryptology Academy — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 67
- 课程
- 261
常见问题解答
「JWT 剖析:标头、载荷与签名」课时是免费的吗?
是的 — 「JWT 剖析:标头、载荷与签名」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「JWT 剖析:标头、载荷与签名」这节课中我会学到什么?
解码 base64url 部分,并理解 JWT 的每个字段 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「JWT 剖析:标头、载荷与签名」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。