【身份与访问控制工程】JWT、JWS、JWE、JWKS 一次讲透

💡 原文中文,约21700字,阅读约需52分钟。
📝

内容提要

本文探讨了JWT、JWS、JWE、JWK及JWKS之间的关系,分析了它们的设计、签名算法选择及安全性问题。重点讨论了常见攻击方式及防御措施,如alg=none攻击和算法混淆。最后,提供了JWT的最佳实践和选型建议,强调在生产环境中的安全细节和运维策略。

🎯

关键要点

  • JWT、JWS、JWE、JWK、JWKS之间的关系复杂,许多团队在实施时未能理清,导致安全问题。
  • JWT的结构包括Header、Payload和Signature,Header中必须包含alg、typ和kid等字段。
  • JWS保护数据的完整性与真实性,而JWE则保护数据的机密性,二者有本质区别。
  • 选择签名算法时,HS256适合单一信任域,RS256是最通用的非对称方案,ES256和EdDSA在性能和安全性上更优。
  • 常见的攻击方式包括alg=none攻击、算法混淆、JKU/X5U注入等,需采取相应防御措施。
  • JWKS端点的标准结构应包含密钥类型、用途、算法和密钥ID等信息,密钥轮换应确保零停机。
  • 在生产环境中,JWT的运维细节包括exp与时钟偏差的处理、令牌尺寸的监控和调试工具的使用。
  • 最佳实践建议包括算法白名单、kid格式校验、issuer路由和audience严格校验等。

延伸问答

JWT、JWS、JWE、JWK和JWKS之间有什么关系?

JWT是Claims的JSON表示,JWS是带签名的数据容器,JWE是加密的数据容器,JWK是密钥的JSON表示,JWKS是包含多个JWK的集合。这些规范相互关联,构成了现代身份验证的基础。

选择JWT签名算法时应该考虑哪些因素?

选择签名算法时应考虑信任域、性能、安全性和密钥长度。HS256适合单一信任域,RS256是通用的非对称方案,ES256和EdDSA在性能和安全性上更优。

JWT的常见安全攻击有哪些?

常见的攻击包括alg=none攻击、算法混淆、JKU/X5U注入等。这些攻击利用了JWT规范的设计缺陷和实现中的漏洞。

如何防御JWT的alg=none攻击?

防御alg=none攻击的有效方法是在服务端硬编码允许的算法白名单,显式拒绝none算法,并确保验证逻辑不信任header中的算法声明。

在生产环境中使用JWT时需要注意哪些运维细节?

在生产环境中,需注意exp与时钟偏差的处理、令牌尺寸的监控和调试工具的使用,以确保JWT的有效性和安全性。

JWKS的标准结构是什么?

JWKS的标准结构包含一个JSON对象,包含一个keys数组,每个key包含kty、use、alg、kid等字段,描述密钥的类型、用途和算法等信息。

➡️

继续阅读