【问题标题】:NextJs middleware can't verify JWT from java spring backendNextJs 中间件无法从 java spring 后端验证 JWT
【发布时间】:2022-10-23 20:16:44
【问题描述】:

我主要将 Nextjs 用于我的前端,将 Java springboot 用于我的后端。但是我想使用 nextjs 中间件通过 JWT 保护我的路由。由于 jsonwebtoken 不能在边缘函数上运行,我正在使用 jose。

在尝试从 cookie 中获取 JWT 后,我尝试对其进行验证并收到以下消息:

JWSSignatureVerificationFailed:签名验证失败

这是我的令牌在 spring 后端的签名:

public static String generateJwtToken(AppUser user) {
        Map<String, Object> claims = new HashMap<>();

        return Jwts.builder()
            .setClaims(claims)
            .setSubject(user.getUsername())
            .setIssuedAt(new Date(System.currentTimeMillis()))
            .setExpiration(new Date(System.currentTimeMillis() + TOKEN_VALIDITY * 1000))
            .signWith(SignatureAlgorithm.HS512, jwtSecret)
            .compact(); 
    }

这是在我的 nextjs 中间件文件中验证它的尝试:

  const token = request.cookies.get('jwt');

  const { payload } = await jwtVerify(
    token,
    new TextEncoder().encode(process.env.SECRET_KEY)
  );

注意: jwtSecret 和 SECRET_KEY 是来自完全相同的 .env 文件的完全相同的值。任何帮助将不胜感激

【问题讨论】:

    标签: spring spring-boot next.js jwt


    【解决方案1】:

    在这里https://github.com/auth0/node-jsonwebtoken/issues/208#issuecomment-231861138 或多或少地找到了我的答案。这个确切的评论解释了密钥应该发生的事情。

    至于我在代码中修复的内容,我必须将密钥作为字节数组返回。

    .signWith(SignatureAlgorithm.HS512, jwtSecret.getBytes("UTF-8"))
    

    【讨论】:

      猜你喜欢
      • 2019-08-05
      • 1970-01-01
      • 2022-07-05
      • 2017-03-08
      • 2021-11-03
      • 2017-03-11
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多