Java 的 JWT 实现库 java-jwt 介绍

java-jwt 介绍

auth0 的 java-jwt 是一个 JSON WEB TOKEN(JWT)的一个实现。

GitHub:https://github.com/auth0/java-jwt

依赖引入

<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.11.0</version>
</dependency>

已实现的算法

该库使用以下算法实现 JWT 验证和签名:

JWS 算法 介绍
HS256 HMAC256 HMAC with SHA-256
HS384 HMAC384 HMAC with SHA-384
HS512 HMAC512 HMAC with SHA-512
RS256 RSA256 RSASSA-PKCS1-v1_5 with SHA-256
RS384 RSA384 RSASSA-PKCS1-v1_5 with SHA-384
RS512 RSA512 RSASSA-PKCS1-v1_5 with SHA-512
ES256 ECDSA256 ECDSA with curve P-256 and SHA-256
ES384 ECDSA384 ECDSA with curve P-384 and SHA-384
ES512 ECDSA512 ECDSA with curve P-521 and SHA-512

JWT 基本使用

产生加密 Token

String token = JWT.create()
		.withExpiresAt(new Date(System.currentTimeMillis()+1000)) // 设置过期时间
		.withAudience("root") // 设置接受方信息,一般时登录用户
		.sign(Algorithm.HMAC256("123456")); // 使用HMAC算法,123456作为密钥加密
System.out.println(token);
// eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJyb290IiwiZXhwIjoxNjA0NjMyMTY0fQ.5JbpimPPzTnXSVX9LL6eekH7tkFc6ApRkhIUnTGt0BY

解密 Token 获取负载信息

DecodedJWT jwt1 = JWT.decode(token);
String userId = jwt1.getAudience().get(0);
System.out.println(userId); // root

验证 Token 是否有效

Algorithm algorithm = Algorithm.HMAC256("123456");
JWTVerifier jwtVerifier = JWT.require(algorithm).withIssuer(userId).build();
DecodedJWT jwt2 = jwtVerifier.verify(token); 
System.out.println(jwt2.getAudience().get(0)); // root