理解什么是JOSE

JOSE是一种旨在在各方质检传递声明(Claims)的方法的规范集。我们常用的JWT就是包含了允许客户端访问特定资源的声明。JOSE制定了一系列的规范来达到此目的,目前包含以下几个RFC:

  1. JWS:JSON Web签名,描述生成和处理签名消息

  2. JWE:JSON Web加密,描述了保护和处理加密消息

  3. JWK:JSON Web密钥,描述Javascript对象签名和加密中加密密钥的格式和处理

  4. JWA:JSON Web算法,描述了Javascript对象签名和加密中使用的加密算法

  5. JWT:JSON Web令牌,描述以JSON编码并由JWS或JWE保护的声明的表示形式

JWT

JWT实际上是一个对声明进行JOSE处理方式的统称。目前绝大多数教程中提到的JWT实际上应该是JWS——是JWT的一种实现。除了JWS,JWT还有另一种时间JWE。三者的关系如下:

2021-09-10-20-33-27

JWE

JWS仅仅对声明(Claims)做了签名(我可以把声明理解成用户要传递的信息么),保证了其不被篡改,但是其payload中的信息是暴露的。也就是说,JWS仅仅保证数据的完整性而不保证数据不被泄漏。也就是说JWS仅仅能保证数据的完整性而不能保证数据不被泄漏。JWE的存在就是为了解决这个问题。

(我暂时不想研究JWE,因为我目前没有相关的需求)

参考资料

  1. 你知道你对 JSON Web Token 的认识存在误解吗