NextJs 中间件无法从 java spring 后端验证 JWT



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

在尝试从cookie中获取JWT后,我尝试验证它并得到以下消息:

JWSSignatureVerificationFailed:签名验证失败

这是我的代币在春季后端的签名:

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文件的完全相同的值。如有任何帮助,将不胜感激

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

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

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

最新更新