问询org.jose4j.jwt.JwtClaims的setGeneratedJwtId()方法作用及生成规则
setGeneratedJwtId() 生成规则说明
- ID类型:底层调用
java.util.UUID.randomUUID()生成,是符合RFC 4122标准的版本4(完全随机)UUID - 字符组成:由小写十六进制字符(a-f、0-9)和半角横杠
-组成,属于大小写敏感的字符串,完全匹配jti声明的格式要求 - 字符长度:标准UUID字符串格式,总长度36位,结构为
8位-4位-4位-4位-12位 - 安全性保障:基于密码学安全的
SecureRandom生成随机值,122位随机熵可以保证不同jti的碰撞概率可忽略,完全满足jti声明的防重放、唯一性要求
使用建议
- 单签发方场景下直接调用
setGeneratedJwtId()即可满足绝大多数业务需求,无需额外自定义jti - 多签发方场景下如果需要避免跨签发方的jti冲突,可以选择两种方案:
- 自行拼接签发方标识和
setGeneratedJwtId()生成的ID,再通过setJwtId(String jwtId)手动设置 - 自行实现符合业务唯一性规则的jti生成逻辑,手动传入
setJwtId()方法
- 自行拼接签发方标识和
代码示例
import org.jose4j.jwt.JwtClaims; public class JwtBuilder { public void buildClaims() { JwtClaims claims = new JwtClaims(); // 自动生成并设置合规jti claims.setGeneratedJwtId(); // 若需自定义jti则使用下方方法 // claims.setJwtId("issuer1-a1b2c3d4-5678-90ef-ghij-klmnopqrstuv"); // 其余JWT声明设置逻辑... } }
内容的提问来源于stack exchange,提问作者Q2Dev
相关产品推荐
相关产品推荐

