基于nimbus-jose-jwt Java库,我尝试创建以下JSON Web令牌(JWT)并使用JSON Web签名(JWS)使用字符串“secret”哈希到SHA256进行签名。
但在生成序列化字符串并在jwt.io测试后,我总是收到错误“无效签名”。
当我尝试使用Python解码器在服务器端解码时,我也会收到签名错误。可能有什么不对?
byte[] bytes = new byte[32];
String message = "secret";
MessageDigest md = MessageDigest.getInstance("SHA-256");
bytes = md.digest(message.getBytes("UTF-8"));
JWSSigner signer = new MACSigner(bytes);
// Prepare JWT with claims set
JWTClaimsSet claimsSet = new JWTClaimsSet();
claimsSet.setSubject("alice");
SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.HS256), claimsSet);
// Apply the HMAC
signedJWT.sign(signer);
// To serialize to compact form, produces something like
String s = signedJWT.serialize();
答案 0 :(得分:0)
看起来你正在使用" secret"的SHA-256摘要。作为创建MAC的关键,以及普通的旧秘密"用于验证。替换:
byte[] bytes = new byte[32];
String message = "secret";
MessageDigest md = MessageDigest.getInstance("SHA-256");
bytes = md.digest(message.getBytes("UTF-8"));
JWSSigner signer = new MACSigner(bytes);
使用:
JWSSigner signer = new MACSigner("secret");