我正在使用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
我错误地使用了这个库吗?
答案 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")));