【问题标题】:Generated with Java JJWT signature fails at jwt.io debugger在 jwt.io 调试器中使用 Java JJWT 签名生成失败
【发布时间】:2016-11-10 20:19:36
【问题描述】:

我在 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

我是否错误地使用了库?

【问题讨论】:

    标签: java jwt json-web-token jjwt


    【解决方案1】:

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

    这是由于.signWith(SignatureAlgorithm.HS256, "secret")。由DefaultJwtBuilder类实现

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

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 2017-03-10
      • 1970-01-01
      • 2016-12-20
      • 2020-11-01
      • 2016-11-06
      • 2016-12-24
      • 2019-04-10
      • 2021-01-09
      相关资源
      最近更新 更多