问题:
配置的签名密码与java端的密码一致,但token的签名验证失败。核对过签名密码、签名算法、都确定是一致的。
分析结果:python中使用原格式的secret_key进行签名的验证,但在java中,我们配置的签名密码会经过一次base64解码再进行签名,因此python侧签名验证失败。
解决方案:
1、修改java端配置的密码,配置为签名密码的base64编码值,在python侧直接使用签名密码原文;
2、在python侧对密码做一次base64解码,不过要求密码是4的整数倍,如果不是,测试发现还是验证不通过,即使添加“=”作为padding,还是会失败;
还有一个临时解决方法,就是在python侧不做签名校验,但是安全性会降低,无法保证数据没有被篡改过。
代码如下:
decoded_token = jwt.decode(token, jwt_secret, algorithms=["HS512"], options={"verify_signature": False})