java - JWT 签名与本地计算的签名不匹配

标签 java jwt token

我正在使用

JwtBuilder builder = Jwts.builder()
                    .setId(user.getEmail())
                    .signWith(signatureAlgorithm, signingKey);

然后创建一个 token

Jwts.parser().setSigningKey(secret).parse(token);

验证。当我在 JUnit 测试中运行它时,它工作正常。但是,当我对通过 REST 调用作为 header 传递的 token 进行身份验证时,身份验证失败并出现 SignatureException。我已经验证了 HTTP 调用两端的 token 并且 token 字符串是相同的。创建/验证的代码是静态的,因此,每一方的 secret 都是相同的。

最佳答案

static Key secret = MacProvider.generateKey(); 每次您的服务器重新加载时都会生成一个新的随 secret 钥,因为静态变量是在类加载时初始化的

这意味着如果你发出一个 JWT,它只在服务器不重启时有效。您得到的 SignatureException 是因为签名 key 不同

您需要在第一次生成后存储签名 key secret.getEncoded(),并在您的模块启动时加载它

关于java - JWT 签名与本地计算的签名不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397484/

相关文章:

java - 您如何跟踪 PDPageContentStream 文本输出的位置?

java - Java中静态变量的文本顺序和初始化顺序

java - 具有圆心、半径和法 vector 的圆圆周上的 3d 点

python - PyJWT,需要 PEM 格式的 key

android - 从基于 GAE 的应用程序获取 Auth Cookie 的正确 URL 是什么

java - 线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : 0 in AWT

spring - 将参数传递给 Controller

c# - 如何在 .net 核心 JwtBearerOptions.Events 中使用依赖注入(inject)?

Javascript:意外的标记 else

linux - kubectl create token 创建的 token 存储在哪里(从 v1.24 开始)?