JWT(JSON Web Token) 是一种开放标准(RFC 7519),用于在网络应用间安全传输信息,通常用于身份验证和信息交换。其核心特点是通过紧凑且自包含的 JSON 对象传递数据,无需服务端存储会话状态。
开发中需要 JWT 的主要原因是为了解决传统基于 Session 的身份验证方法中存在的问题,比如跨域认证不便、扩展性差等问题。而 JWT 允许我们设计无状态的、分布式的 Web 应用,通过在每个请求中传递 Token 来验证用户身份,从而实现更加灵活和可扩展的架构。
JWT 执行流程如下:
它的主要执行流程如下:
JWT 是由三部分组成的:
它们之间用点“.”分隔,形成一个字符串(Token)。
在 Spring Boot 项目中,首先要引入 JWT 工具依赖,之后通过以下核心代码可以生成 Token,以及验证 Token:
// 生成 JWT(示例)|SECRET_KEY 为服务保存的密钥。
public String generateToken(UserDetails user) {
return Jwts.builder()
.setSubject(user.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}
// 验证 JWT(示例)
public boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
JWT 和 Session 主要区别如下:
尽管 JWT 有很多优点,但也存在一些挑战:
JWT 提供了一种有效的方法来处理用户身份验证和信息交换的问题,也是目前主流的用户登录验证机制,但同时也需要注意上述提到的一些潜在风险和限制,它更适用于分布式大型项目的用户信息传输和登录权限判断。