Java中JWT生成token字符串,在python中解析报错Signature verification failed

现在的情况是用户登录在springboot中生成了token字符串,保存在前端内存中。前端在访问另外一个python项目市,在python中想从这个token中解析出保存的信息,在python中解析时一直报错。
Java生成token代码:

public static final String SECRET = "Secret";
HashMap<String, Object> map = new HashMap<>();
map.put(ROLE, username);
map.put(USERNAME, username);
String jwt = Jwts.builder()
                .setClaims(map)
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
                .signWith(SignatureAlgorithm.HS512, SECRET)
                .compact();

python中解析token字符串代码(pyjwt),

import jwt
jwt.decode(token, 'Secret', algorithms=['HS512'])

一直报错

raise InvalidSignatureError('Signature verification failed')
jwt.exceptions.InvalidSignatureError: Signature verification failed

在stack overflow上面查看相关的问题的时候有人说是要base64解码一次密钥,我试了一下还是不行,反倒是会报出在解码时报错
这个是stack overflow上面相似问题的回答。
请问是我的解析的代码有问题还是其他什么原因。
python版本是3.7.5
pyjwt版本是1.7.1

阅读 10.3k
2 个回答
新手上路,请多包涵

我遇到了一样的问题,看了 java 的代码是有一个 base64 的解密操作:

    public JwtBuilder signWith(SignatureAlgorithm alg, String base64EncodedSecretKey) {
        Assert.hasText(base64EncodedSecretKey, "base64-encoded secret key cannot be null or empty.");
        byte[] bytes = TextCodec.BASE64.decode(base64EncodedSecretKey);
        return signWith(alg, bytes);
    }

bytes 就是 jwt 的加密 key,在 python 里我加了这步逻辑之后就可以了:

JWT_SALT = base64.decodebytes(SALT.encode('utf8'))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏