Hutool JWT 验证工具- JWTValidator
# Hutool JWT 验证工具- JWTValidator
介绍
在 Hutool 中,JWT.verify
仅用于验证 JWT Token 的签名有效性,对于其他 Payload 字段的验证,可以使用 JWTValidator
来实现。JWTValidator
提供了丰富的验证功能,包括算法验证、时间验证等,帮助开发者更灵活地处理 JWT 的校验逻辑。
# 验证算法一致性
算法验证主要涉及两个方面:
- 验证 JWT Header 中的算法 ID 是否与提供的算法 ID 一致。
- 调用
JWT.verify
方法验证 Token 的签名是否正确。
# 代码示例
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTValidator;
import cn.hutool.jwt.signers.JWTSignerUtil;
import cn.hutool.core.date.DateUtil;
public class JwtValidatorExample {
public static void main(String[] args) {
// 创建 JWT Token,包含 Not Before 时间,并使用 HS256 签名
final String token = JWT.create()
.setNotBefore(DateUtil.date()) // 设置生效时间,确保 Token 在此时间后生效
.setKey("123456".getBytes()) // 设置签名密钥
.sign(); // 签名生成 Token
// 使用 JWTValidator 验证算法
JWTValidator.of(token)
.validateAlgorithm(JWTSignerUtil.hs256("123456".getBytes())); // 验证算法 ID 和签名
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
关键点解析:
setNotBefore(Date date)
:设置 JWT 的生效时间,Token 在此时间之后才有效。validateAlgorithm(JWTSigner signer)
:验证 Header 中的算法 ID 与提供的算法是否匹配,并调用JWT.verify
进行签名验证。传入的签名器(JWTSigner
)需要与生成 Token 时的算法保持一致。
# 验证时间字段
对于时间类载荷(如生效时间、失效时间、签发时间),JWTValidator
提供了专门的验证方法。主要验证内容包括:
- 生效时间(
JWTPayload.NOT_BEFORE
)不能晚于当前时间。 - 失效时间(
JWTPayload.EXPIRES_AT
)不能早于当前时间。 - 签发时间(
JWTPayload.ISSUED_AT
)不能晚于当前时间。
# 时间线概述
(签发时间) -------- (生效时间) -------- (**当前时间**) -------- (失效时间)
1
一般要求:签发时间和生效时间都应早于当前时间。
# 代码示例
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTValidator;
import cn.hutool.core.date.DateUtil;
public class JwtValidatorExample {
public static void main(String[] args) {
// 创建 JWT Token,仅设置签发时间
final String token = JWT.create()
.setIssuedAt(DateUtil.date()) // 设置签发时间
.setKey("123456".getBytes()) // 设置签名密钥
.sign(); // 签名生成 Token
// 由于只定义了签发时间,因此只验证签发时间
JWTValidator.of(token)
.validateDate(DateUtil.date()); // 验证签发时间是否早于当前时间
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
关键点解析:
setIssuedAt(Date date)
:设置 JWT 的签发时间,表示 Token 生成的时间点。validateDate(Date currentDate)
:验证与当前时间相关的所有时间载荷字段,包括签发时间、生效时间和失效时间。传入的currentDate
是当前时间。
总结
JWTValidator
是 Hutool 提供的一个强大的 JWT 验证工具,补充了 JWT.verify
无法处理的时间和算法验证。通过 JWTValidator
,开发者可以灵活地定义和校验 Token 的时间约束、算法一致性等,确保 Token 的有效性和安全性。在实际应用中,建议根据业务需求灵活选择和配置这些验证逻辑。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08