0Pricing
Cryptology Academy · 课时

安全实现 JWT 的最佳实践

在生产应用中安全地存储、轮换和撤销 JWT

安全实现 JWT 的最佳实践 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

核心原则

JWT 的安全性取决于其实现。规范具有灵活性,而灵活性会带来漏洞。请遵循以下最佳实践,避免导致生产系统身份验证绕过的常见问题。

固定算法

始终明确指定预期算法:jwt.decode(token, key, algorithms=["RS256"])。绝不要读取令牌标头中的算法来选择验证密钥或代码路径。这样可以防止 alg=none 和密钥混淆攻击。

短过期时间 + 刷新令牌

访问令牌:15-60 分钟。刷新令牌:7-30 天,存储在 httpOnly Cookie 中(不要存储在 localStorage 中)。令牌过期后,客户端使用刷新令牌从身份验证服务器获取新的访问令牌,无需重新进行身份验证。

受众与签发者验证

验证 aud(受众),确保令牌是为您的服务签发的,而不是为其他服务签发的。根据您的身份验证服务器 URL 验证 iss(签发者)。如果没有这些检查,使用同一密钥签名的其他应用令牌也会被接受。

令牌存储

将访问令牌存储在内存中(JS 变量)——关闭标签页时清除。将刷新令牌存储在 httpOnly、Secure、SameSite=Strict Cookie 中——JavaScript 无法访问。绝不要将 JWT 存储在 localStorage 中——XSS 可以窃取它们。

撤销策略

JWT 是无状态的——没有内置的撤销机制。可选方案包括:维护一份撤销列表(拒绝列表),并在每次请求时检查;使用非常短的过期时间;在高安全性场景中使用不透明令牌,并通过中央服务查询。

密钥轮换

定期轮换签名密钥。在 JWKS 中发布多个具有不同 kid 值的密钥。轮换期间:使用新的 kid 签发新令牌,在旧令牌过期之前保持旧密钥有效,然后从 JWKS 中移除旧密钥。

载荷中的敏感数据

绝不要将敏感数据(密码、社会安全号码、信用卡信息)放入 JWT 载荷中——它仅经过 base64url 编码,并未加密。如果需要加密声明,请使用 JWE(JSON Web Encryption),或者将敏感数据保存在服务器端。

仅使用 HTTPS

仅通过 HTTPS 传输 JWT。被 HTTP 拦截的 JWT 会导致完整的身份验证绕过。请为 Cookie 设置 Secure 标志。使用 HSTS 防止协议降级。绝不要在服务器日志中记录完整的 JWT 字符串。

库的选择

请使用维护良好的库:PyJWT 2+、python-jose、auth0/node-jsonwebtoken 9+、Nimbus JOSE + JWT(Java)。避免从头实现 JWT 验证。定期检查 CVE 数据库,了解库中的漏洞。

测试

测试所有攻击向量:提交 alg=none 令牌、RS256→HS256 混淆令牌、过期令牌、错误受众令牌以及被篡改的载荷。使用 jwt.io 构造测试令牌。添加集成测试,断言这些令牌都会被以 401 拒绝。

快速检查

在 Web 应用中,应将刷新令牌存储在哪里?

回顾

安全使用 JWT 需要固定算法、较短的访问令牌过期时间、使用 httpOnly Cookie 存储刷新令牌、验证受众和签发者,以及轮换密钥。下一步:密码学秘密共享方案。

常见问题解答

「安全实现 JWT 的最佳实践」课时是免费的吗?

是的 — 「安全实现 JWT 的最佳实践」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「安全实现 JWT 的最佳实践」这节课中我会学到什么?

在生产应用中安全地存储、轮换和撤销 JWT 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「安全实现 JWT 的最佳实践」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. JWT 剖析:标头、载荷与签名
  2. HS256 与 RS256:对称式和非对称式 JWT
  3. JWT 漏洞:alg=none 与密钥混淆
  4. 安全实现 JWT 的最佳实践
← 返回 Cryptology Academy