使用Java生成JJWT签名在jwt.io调试器

时间:2016-07-08 09:51:26

标签: java jwt json-web-token jjwt

我正在使用jjwt Java库在servlet上生成jwt的服务器端,直接来自jjwt GitHub页面https://github.com/jwtk/jjwt的代码片段生成并打印出这个令牌。

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UifQ.XIKER3owR8BS3Krhsksg9INh9VBSejdn_qN-ONtPans
 String compactJws = Jwts.builder()
      .setSubject("Joe")
      .signWith(SignatureAlgorithm.HS256, "secret")
      .compact();
  PrintWriter out = response.getWriter();
  out.println(compactJws);

但是,当我尝试在jwt.io的调试器上验证此令牌时,它未通过签名检查。 Both checking and unchecking secret base64 encoded didn't work

我错误地使用了这个库吗?

1 个答案:

答案 0 :(得分:2)

尝试使用secr并检查base64选项:)

归功于.signWith(SignatureAlgorithm.HS256, "secret")。它由https://msdn.microsoft.com/en-us/library/bb510625.aspx

实现
public JwtBuilder signWith(SignatureAlgorithm alg, String base64EncodedSecretKey) 

此方法假定您在base64中提供密钥, secret不是base64 。当方法从base64解码为byte[]时, jjwt 使用的java转换器提供了字符串secr的表示,该字符串与<强> jwt.io

您可以使用

进行自我测试
System.out.println(
                javax.xml.bind.DatatypeConverter.printBase64Binary(
                        javax.xml.bind.DatatypeConverter.parseBase64Binary("secret")));