使用JWT创建解析令牌及RSA非对称加密详解
@Test
public void test() throws InvalidKeySpecException, NoSuchAlgorithmException {
RSAPublicKey publicKey = RsaAlgorithmFactory.getPublicKey(publicKey1);
//Security.addProvider(new BouncyCastleProvider());
RSAPrivateKey privateKey = RsaAlgorithmFactory.getPrivateKey(privateKey1);
System.out.println(privateKey.getFormat());
Map
headers.put("ip", "123.12.123.25.12");
JWTCreator.Builder builder = JWT.create()
//JWT唯一标识 jti
.withJWTId(UUID.randomUUID().toString())
.withHeader(headers)
.withClaim("username", "田润叶")
.withClaim("password", "不喜欢")
//发布者 iss
.withIssuer("顾养民")
//发布时间 iat
.withIssuedAt(Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()))
//受众|收件人 aud
.withAudience("田海民", "孙玉婷")
//指定JWT在指定时间之前不得接受处理 nbf
.withNotBefore(Date.from(LocalDateTime.now().plusMinutes(-1).atZone(ZoneId.systemDefault()).toInstant()))
//JWT的主题 sub
.withSubject("令牌")
//JWT的密钥ID(实际未用到),用于指定签名验证的密钥 kid com.auth0.jwt.algorithms.RSAAlgorithm.verify
.withKeyId("sd")
//JWT过期时间 exp
.withExpiresAt(LocalDateTime.now().plusMinutes(5).atZone(ZoneId.systemDefault()).toInstant());
String jwtToken = JwtFactory.createJwtToken(builder, Algorithm.RSA256(publicKey, privateKey));
Assert.assertNotNull(jwtToken);
DecodedJWT jwt = JwtFactory.verifyJwtToken(jwtToken, Algorithm.RSA256(publicKey, privateKey));
Assert.assertEquals(jwt.getClaim("username").asString(), "田润叶");
Assert.assertEquals(jwt.getClaim("password").asString(), "不喜欢");
Assert.assertEquals(jwt.getHeaderClaim("ip").asString(), "123.12.123.25.12");
Assert.assertEquals(jwt.getIssuer(), "顾养民");
Assert.assertEquals(jwt.getAudience().get(0), "田海民");
Assert.assertEquals(jwt.getAudience().get(1), "孙玉婷");
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播