JWT 签名验证失败,java 生成 php解
//java 出错误版
JwtBuilder jwtBuilder = Jwts.builder();
String token = jwtBuilder
.claim("access_key","6uVG1xmibb3EX7XhUV3g6jflPidNhNon")
.claim("header","MARKETING_MALL")
.setExpiration(new Date(System.currentTimeMillis() + 1000*3600*24))
.signWith(SignatureAlgorithm.HS256, "hj4iRrB2DEGAMDRHzVYFed14weSN")
.compact();
header.add("Authorization", "Bearer "+token);
php解
$result = JWT::decode("java的jwt token", “hj4iRrB2DEGAMDRHzVYFed14weSN”,['HS256']);
理论上来说是没问题的 现实很残酷
最终找了资料找到了原因 是格式转换问题。jjwt 需要使用 base64 编码的密钥,而 php-jwt 使用纯字符串
//java 正确写法
String token = jwtBuilder
.claim("access_key","6uVG1xmibb3EX7XhUV3g6jflPidNhNon")
.claim("header","MARKETING_MALL")
.setExpiration(new Date(System.currentTimeMillis() + 1000*3600*24))
.signWith(SignatureAlgorithm.HS256, TextCodec.BASE64.encode("hj4iRrB2DEGAMDRHzVYFed14weSN"))
.compact();