java - 在 Java 中使用 Python 创建的 JWT Token

标签 java python jwt flask-jwt-extended

我有一个有趣的问题。 我将 python 与 Flask 一起用于身份验证服务,它使用 flask_jwt_extended 生成 JWT token 。 这就是我使用 Flask JWT Extended 在 Python 中生成 token 的方式。

identity = {
        "firstname": user.firstname,
        "lastname": user.lastname,
        "email": user.email,
        "uuid": user.user_uuid,
        'user_id': user.id
    }
access_token = create_access_token(identity=identity, fresh=True)

在配置中我指定了 JWT key 和 JWT 算法:

JWT_SECRET_KEY = "this-really-needs-to-be-changed"
JWT_ALGORITHM = "HS256"

在 Java 中,我使用 jjwt 库(io.jsonwebtoken、jjwt、0.9.0)来解码我制作的 JWT:

Claims userJWT = Jwts.parser()
                    .setSigningKey("this-really-needs-to-be-changed")
                    .parseClaimsJwt(token)
                    .getBody();

但是在 Java 中,如果我运行它,我会得到一个异常,我真的不明白问题出在哪里,因为算法和 token 是相同的。

几个小时以来,我一直在尝试找出问题所在,因为这对我来说毫无意义,

异常(exception):

  : JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.

io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.
        at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:354) ~[jjwt-0.9.0.jar!/:0.9.0]
        at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:481) ~[jjwt-0.9.0.jar!/:0.9.0]
        at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:541) ~[jjwt-0.9.0.jar!/:0.9.0]

最佳答案

可能是 key 的编码问题,因为您的 Java 库需要 base64 编码的 key 。参见 DefaultJwtParser

public JwtParser setSigningKey(String base64EncodedKeyBytes) {

请试试这个:

Claims userJWT = Jwts.parser()
                .setSigningKey(Base64.getEncoder().encodeToString("this-really-needs-to-be-changed"))
                .parseClaimsJwt(token)
                .getBody();

关于java - 在 Java 中使用 Python 创建的 JWT Token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49458593/

相关文章:

python - 如何将列表中的每个字典转换为Python中的嵌套字典?

authentication - VueJS/Vuex App - 验证用于身份验证的 JWT token

authentication - JSON Web token (JWT) 的安全性和可靠性问题

java - 如何获取同时包含JSON对象和数组的JSON数据

python - Firebase DB HTTP API 身份验证 : When and how to refresh JWT token?

python - 如何防止可选参数多次出现

javascript - 如何使用 Next.js 和 Rails 后端安全地存储 JWT?

java - 使用java的RDD函数中的类型不匹配

Java对象相等

java - 在android的默认浏览器选择列表中添加我的浏览器?