我想通过rest api调用检查jwt令牌的有效性,有可能做到这一点吗? (如果可能的话,java,因为我有一个带有 Spring Boot 的 Java 后端和带有 ReactJs 的 JavaScript 前端) 我已经使用 java 和使用 toeken jwt 的 antoher 服务进行了令牌生成。
我已经使用
jsonwebtoken
库完成了此操作。您应该拥有用于加密 jwt 令牌的 jwt 密钥。
您可以在您的 REST API 中使用这些方法:
public boolean validateJwtToken(String authToken) {
try {
Jwts.parserBuilder().setSigningKey(key()).build().parse(authToken);
return true;
} catch (MalformedJwtException e) {
logger.error("Invalid JWT token: {}", e.getMessage());
}
return false;
}
private Key key() {
return Keys.hmacShaKeyFor(Decoders.BASE64.decode(jwtSecret));
}
还需要以下依赖项:
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.5</version>
<scope>runtime</scope>
</dependency>
public boolean validateToken(String authToken) throws IOException {
try {
Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(authToken);
return true;
} catch (ExpiredJwtException e) {
log.warn(Expired_JWT_TOKEN);
} catch (UnsupportedJwtException e) {
log.warn(INVALID_JWT_TOKEN);
} catch (MalformedJwtException e) {
log.warn(INVALID_JWT_TOKEN);
} catch (SignatureException e) {
log.warn(INVALID_JWT_TOKEN);
} catch (IllegalArgumentException e) {
log.warn("Token validation error {}", e.getMessage());
}
return false;
}