Java中生成的JSON Web签名生成无效签名

时间:2015-05-13 13:56:36

标签: java jwt

基于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();

1 个答案:

答案 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");