使用 Java JJWT 签名生成在 jwt.io 调试器中失败
Generated with Java JJWT signature fails at jwt.io debugger
我在 servlet 上使用 jjwt Java 库在服务器端生成 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
我是不是用错了库?
尝试 secr
并检查 base64 选项:)
这是由于 .signWith(SignatureAlgorithm.HS256, "secret")
。它由 DefaultJwtBuilder class
实现
public JwtBuilder signWith(SignatureAlgorithm alg, String base64EncodedSecretKey)
此方法假定您提供的是 base64 密钥,并且 secret
不是 base64。当方法从 base64
解码为 byte[]
时,jjwt 使用的 java 转换器提供了字符串 secr
的表示形式,这是不同的在 jwt.io
处使用的 JavaScript 解码器
你可以用
测试你自己
System.out.println(
javax.xml.bind.DatatypeConverter.printBase64Binary(
javax.xml.bind.DatatypeConverter.parseBase64Binary("secret")));
我在 servlet 上使用 jjwt Java 库在服务器端生成 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
我是不是用错了库?
尝试 secr
并检查 base64 选项:)
这是由于 .signWith(SignatureAlgorithm.HS256, "secret")
。它由 DefaultJwtBuilder class
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")));