当前位置: 首页 > 面试题库 >

使用Java JJWT签名生成的文件在jwt.io调试器上失败

那谦
2023-03-14
问题内容

我正在使用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的调试器上验证此令牌时,它未通过签名检查。
检查和取消检查秘密base64编码均无效

我使用图书馆有误吗?


问题答案:

尝试secr并检查base64选项:)

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

public JwtBuilder signWith(SignatureAlgorithm alg, String base64EncodedSecretKey)

此方法假定您在base64中提供密钥,而 secret 不是base64。当方法从解码base64
jjwtbyte[]使用的java转换器时,提供的字符串表示形式不同于 jwt.io上 使用的JavaScript解码器 __secr

您可以用

System.out.println(
                javax.xml.bind.DatatypeConverter.printBase64Binary(
                        javax.xml.bind.DatatypeConverter.parseBase64Binary("secret")));


 类似资料:
  • 我有一个默认ACL设置为private的bucket。我想生成预签名的url,并将其分发给用户,以便他们可以上传文件,上传后文件需要公开访问。 我可以生成预签名的url并上传文件,但文件始终保持私有。如果我在创建签名url时将ACL设置为“public-read”,那么getSignedUrl()正在生成签名url,但对该签名url的PUT请求会拒绝访问。 bucket可以包含私有或公共可访问的文

  • 最近我需要在Java中使用RSA对一个字符串进行签名,并在C++中验证签名。 在Java,现在我认为一切都是好的,我创建了public.keystore和private.keysore,可以成功地对数据进行签名和veify。但是当我试图用C++验证它时,它显示签名失败。 这是我的Java代码,在Java,我将数据签名到base64String,并将其保存在我的本地文件中,保存为“sig.dat”,

  • 我们使用java-jwt编写了小API。当我创建令牌并在代码中验证令牌时,Java正常工作。 创建RSA私钥和公钥。(参考其中一个测试用例) 使用算法创建令牌。RS256与私钥。 验证了相同的令牌,并获得了预期的输出。 然后向客户端提供公钥,我们开始使用生成的令牌调用他们的REST服务。客户端使用https://www.npmjs.com/package/jsonwebtoken来验证令牌。他们回

  • 在bucket里找到刚上传的Object 点击访问管理 生成预签名链接 过期时间是一个绝对时间,使用unix时间戳,单位是毫秒。预签名链接将会在指定的时间点失效 由于url里包含了签名信息,建议使用https 把生成的url复制到浏览器中地址栏中下载(测试)

  • Strip build/build/intermediates/archiveintermediates/main/installationbuildproductslocation/applications/main.app/main cd/var/folders/zh/kb_4hqhn4kg1h0r5dp_6htcm0000gn/t/build9030811877552061486xxx/di

  • 这就是我面临的问题, https://play.golang.org/p/Pq8xHAERD57 如果运行上述代码,第一个令牌JWKS对不会验证签名,但第二个会验证!但两者都在jwt中验证签名。木卫一。有什么办法可以用一个Golang图书馆来验证它吗? 奇怪的是如果你拿了失败的代币?我调试后发现函数func VerifyPKCS1v15(pub*PublicKey,hash crypto.hash