gpt4 book ai didi

java - 使用 Java 进行 JWT Token 验证

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:00 26 4
gpt4 key购买 nike

我遇到一个问题,每当我签署一个 token 时,我也会解析它并且它不会抛出任何签名异常。

你可以看到 key 是不同的,但它给我正确的响应。

public class JwtUtil {

public String parseToken(String token) {
try {
Jws<Claims> jwt = Jwts.parser()
.setSigningKey("Test@12")
.parseClaimsJws(token);


System.out.println(jwt.getBody().getSubject());
return "Valid";

} catch (SignatureException jwtException) {
jwtException.printStackTrace();
return null;
}
}


public String generateToken() {

Claims claim = Jwts.claims();
claim.put("GivenName", "Johnny");
claim.put("Surname", "Rocket");
claim.put("Email", "jrocket@example.com");

return Jwts.builder().setHeaderParam("typ", "JWT").setClaims(claim)
.setIssuer("Online JWT Builder")
.setAudience("www.example.com").setSubject("jrocket@example.com")
.signWith(SignatureAlgorithm.HS256, "Test@123").compact();


}

public static void main(String[] args) {
JwtUtil jwtUtil = new JwtUtil();
String token = jwtUtil.generateToken();
System.out.println(token);

JwtUtil jwtUtil1 = new JwtUtil();
jwtUtil1.parseToken(token);
}
}

最佳答案

真的 Test@12 Test@123 是同一个key

这是由于 JwtBuilder.signWith(SignatureAlgorithm alg, String base64EncodedSecretKey)。假设您提供的是 base64 key ,而您的 key 不是 base64。当该方法从 base64 解码为 byte[] 时,jjwt 使用的 java 转换器提供了字符串的表示形式。 Test@12Test@123用字节数组编码

参见 https://stackoverflow.com/a/38269014/6371459

你可以测试自己

System.out.println(
javax.xml.bind.DatatypeConverter.printBase64Binary(
javax.xml.bind.DatatypeConverter.parseBase64Binary("Test@12")));
System.out.println(
javax.xml.bind.DatatypeConverter.printBase64Binary(
javax.xml.bind.DatatypeConverter.parseBase64Binary("Test@123")));

尝试(更多)不同的 key ,SignatureException 将被抛出

关于java - 使用 Java 进行 JWT Token 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38812424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com