JOSE是一种旨在在各方质检传递声明(Claims)的方法的规范集。我们常用的JWT就是包含了允许客户端访问特定资源的声明。JOSE制定了一系列的规范来达到此目的,目前包含以下几个RFC:
-
JWS:JSON Web签名,描述生成和处理签名消息
-
JWE:JSON Web加密,描述了保护和处理加密消息
-
JWK:JSON Web密钥,描述Javascript对象签名和加密中加密密钥的格式和处理
-
JWA:JSON Web算法,描述了Javascript对象签名和加密中使用的加密算法
-
JWT:JSON Web令牌,描述以JSON编码并由JWS或JWE保护的声明的表示形式
JWT
JWT实际上是一个对声明进行JOSE处理方式的统称。目前绝大多数教程中提到的JWT实际上应该是JWS——是JWT的一种实现。除了JWS,JWT还有另一种时间JWE。三者的关系如下:
JWE
JWS仅仅对声明(Claims)做了签名(我可以把声明理解成用户要传递的信息么),保证了其不被篡改,但是其payload中的信息是暴露的。也就是说,JWS仅仅保证数据的完整性而不保证数据不被泄漏。也就是说JWS仅仅能保证数据的完整性而不能保证数据不被泄漏。JWE的存在就是为了解决这个问题。
(我暂时不想研究JWE,因为我目前没有相关的需求)