在微服务架构中,数据安全是基石。随着互联网技术发展,用户对隐私保护的要求日益提高,登录认证、接口传输等环节都需要严密的安全设计。常见的账户密码、手机验证码甚至三方认证,本质上都是身份校验,但数据本身的加密同样关键。在 SpringBoot 生态下,除了广泛使用的 JWT(JSON Web Token),JWE(JSON Web Encryption)提供了一种更高级别的安全保障。
一、前言
多年的开发经验告诉我们,单纯的身份标识往往不够。JWT 虽然解决了无状态认证问题,但它默认只签名不加密,载荷(Payload)部分对任何人都是可见的。如果业务涉及敏感信息,直接放在 JWT 里传输风险很大。这时就需要引入 JWE,它能在保证签名的同时,对内容进行加密,确保只有持有密钥的服务端才能解密查看。
二、JWE 与 JWT 介绍
2.1 什么是 JWE
JWE(JSON Web Encryption)是一种基于 JSON 的数据加密标准,属于 JOSE(Javascript Object Signing and Encryption)规范的一部分。简单来说,它定义了如何将 JSON 对象进行加密并封装成字符串格式,通常用于在不可信的信道上传输敏感数据。
2.2 JWE 与 JWT 的关系
很多人容易混淆 JWT 和 JWE。实际上,JWT 更多是指 JWS(JSON Web Signature)或 JWE 的统称。JWT 侧重于验证数据的完整性和来源,而 JWE 侧重于数据的机密性。两者可以结合使用,即先加密再签名,或者仅加密。
2.3 JWE 主要特点
- 机密性:内容经过加密,无法被中间人窃取。
- 完整性:支持数字签名,防止篡改。
- 互操作性:基于 JSON,跨语言支持良好。
2.4 JWE 数据结构
一个标准的 JWE 由五部分组成,用点号分隔:
- Header(头部):声明加密算法和类型。
- Encrypted Key(加密后的密钥):使用公钥加密的内容密钥。
- Initialization Vector(初始化向量):用于对称加密的随机数。
- Ciphertext(密文):实际加密后的数据。
- Authentication Tag(认证标签):用于验证完整性。
2.5 JWE 中常用的加密算法
密钥加密算法 (alg)
负责加密内容密钥,常见如 RSA-OAEP、ECDH-ES 等。
内容加密算法 (enc)
负责加密实际负载,常用 AES-GCM、AES-CBC 等。
2.6 JWE 对比 JWT 优势
2.6.1 JWT(通常指 JWS)局限性
JWT 的 Payload 部分是 Base64 编码而非加密,任何拿到 Token 的人都可以解码看到里面的用户 ID、角色等信息。如果包含手机号、身份证等敏感字段,存在泄露风险。
2.6.2 JWE(JSON Web Encryption)优势
JWE 将整个 Payload 加密,即使 Token 被截获,攻击者也无法还原明文。适合金融、医疗等高安全需求场景。
2.6.3 JWE 与 JWT 最佳实践探索
建议采用混合模式:使用 JWT 做身份标识,敏感字段单独通过 JWE 传输,或者直接使用 JWE 作为认证令牌。
2.7 JWE 优缺点
优点:安全性高,符合合规要求。 缺点:性能开销略大,密钥管理复杂度高。
三、基于 JWT 加解密项目整合
为了对比效果,我们先回顾一下基础的 JWT 实现流程。
3.1 JWT 基本使用
3.1.1 导入基本的依赖
在 Maven 项目中引入 jose4j 或 nimbus-jose-jwt 即可。
com.nimbusds
nimbus-jose-jwt
9.31


