JAVA全系列 教程
3762个小节阅读:7091.1k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
xxxxxxxxxx
<dependency>
<groupId>org.bitbucket.b_c</groupId>
<artifactId>jose4j</artifactId>
<version>0.7.0</version>
</dependency>
xxxxxxxxxx
RsaJsonWebKey rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);
final String publicKeyString = rsaJsonWebKey.toJson(JsonWebKey.OutputControlLevel.PUBLIC_ONLY);
final String privateKeyString = rsaJsonWebKey.toJson(JsonWebKey.OutputControlLevel.INCLUDE_PRIVATE);
System.out.println(publicKeyString);
System.out.println(privateKeyString);
xxxxxxxxxx
// 创建claims,这将是JWT的内容 B部分
JwtClaims claims = new JwtClaims();
// 谁创建了令牌并签署了它
claims.setIssuer("abcd");
// 令牌将被发送给谁
claims.setAudience("Audience");
// 令牌失效的时间长(从现在开始10分钟)
claims.setExpirationTimeMinutesInTheFuture(10);
// 令牌的唯一标识符
claims.setGeneratedJwtId();
// 当令牌被发布/创建时(现在)
claims.setIssuedAtToNow();
// 在此之前,令牌无效(2分钟前)
claims.setNotBeforeMinutesInThePast(2);
// 主题 ,是令牌的对象
claims.setSubject("subject");
// 可以添加关于主题的附加 声明/属性
claims.setClaim("userId", userId);
claims.setClaim("username", username);
// JWT是一个JWS和/或一个带有JSON声明的JWE作为有效负载。
// 在这个例子中,它是一个JWS,所以我们创建一个JsonWebSignature对象。
JsonWebSignature jws = new JsonWebSignature();
// JWS的有效负载是JWT声明的JSON内容
jws.setPayload(claims.toJson());
System.out.println(claims.toJson());
PrivateKey privateKey = new RsaJsonWebKey(JsonUtil.parseJson(privatekey)).getPrivateKey();
// JWT使用私钥签署
jws.setKey(privateKey);
/*
* 设置关键ID(kid)头,因为这是一种礼貌的做法。 在这个例子中,我们只有一个键但是使用键ID可以帮助
* 促进平稳的关键滚动过程
*/
jws.setKeyIdHeaderValue("keyId");
// 在jw/jws上设置签名算法,该算法将完整性保护声明
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
/*
* 签署JWS并生成紧凑的序列化或完整的jw/JWS 表示,它是由三个点('.')分隔的字符串
* 在表单头.payload.签名中使用base64url编码的部件 如果你想对它进行加密,你可以简单地将这个jwt设置为有效负载
* 在JsonWebEncryption对象中,并将cty(内容类型)头设置为“jwt”。
*/
String jwt = jws.getCompactSerialization();
// 现在你可以用JWT做点什么了。比如把它寄给其他的派对
// 越过云层,穿过网络。
System.out.println("JWT: " + jwt);
return jwt;