【身份与访问控制工程】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等字段,描述密钥的类型、用途和算法等信息。
➡️