关于JOSE、JWA、JWE、JWK、JWS与JWT的区别及关联的技术问询
JOSE 家族:JWA、JWK、JWS、JWE、JWT 的区别与关联
核心定义与区别
JOSE(JSON Object Signing and Encryption)
这不是单个技术标准,而是一套规范集合,专门定义如何用JSON格式实现数据的签名、加密及密钥管理。它是整个体系的顶层框架,下面所有术语都是它的子组件。
JWA(JSON Web Algorithms)
JOSE体系中的算法标准,明确了可用于JWS签名/验证、JWE加密/解密的算法列表,包括:
- 签名类:HS256(HMAC-SHA256)、RS256(RSA-SHA256)、ES256(ECDSA-SHA256)等
- 加密类:AES-GCM、RSA-OAEP等
简单说,它是JWS/JWE执行安全操作的“算法手册”。
JWK(JSON Web Key)
JOSE体系中的密钥标准化表示格式,用JSON结构来描述各种加密/签名密钥(RSA公钥/私钥、EC密钥、对称密钥等),让密钥可以在不同系统间以统一格式传输和存储。示例简化RSA公钥:
{ "kty": "RSA", "n": "公钥模数字符串", "e": "AQAB" }
它的作用是给密钥发一张“标准化身份证”,让JWS/JWE能直接识别使用。
JWS(JSON Web Signature)
JOSE体系中的数字签名标准,定义了如何对JSON数据进行签名,生成带签名的结构化数据,保证数据的完整性(未被篡改)和不可否认性(签名方无法抵赖)。
结构由三段Base64URL编码的字符串用.分隔:[头部].[负载].[签名]
头部会指定使用的签名算法(对应JWA定义的算法),负载是要签名的原始数据。
JWE(JSON Web Encryption)
JOSE体系中的数据加密标准,定义了如何对JSON数据进行加密,生成密文结构,保证数据的保密性(只有拥有密钥的接收方能解密)。
结构比JWS复杂,包含五段Base64URL编码的字符串:[保护头部].[一次性密钥].[初始化向量].[密文].[认证标签]
同样,头部会指定使用的加密算法(来自JWA)。
JWT(JSON Web Token)
基于JOSE标准的具体令牌实现,是一种紧凑、URL安全的令牌格式,用于在各方之间安全传递声明信息(比如用户ID、权限、过期时间等)。
JWT有两种形态:
- 绝大多数场景下的JWT:本质是JWS,负载是明文声明,通过签名保证完整性
- 加密型JWT:本质是JWE,负载是加密后的声明,保证内容不被泄露
日常开发中提到的“JWT”几乎都是JWS形态的令牌。
关联关系梳理
- JOSE是顶层容器:JWA、JWK、JWS、JWE都是JOSE规范族的一部分,共同构成JSON数据安全操作的完整体系。
- JWA是算法基础:JWS的签名/验证、JWE的加密/解密都必须使用JWA中定义的算法,且在各自的头部字段(
alg)中声明。 - JWK是密钥载体:JWS和JWE依赖密钥完成操作,JWK提供了这些密钥的标准化JSON表示,方便系统间密钥交换和使用。
- JWS与JWE是两种安全能力:JWS解决“数据是否被篡改、谁签发的”问题;JWE解决“数据不能被第三方看到”问题,二者是JOSE体系下的两种核心安全操作实现。
- JWT是场景化应用:JWT把用户声明作为负载,利用JWS或JWE的能力生成安全令牌,最常见的场景是身份认证(登录后返回JWT,后续请求用JWT验证身份)。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

