我有一个有趣的问题。我将python与烧瓶一起用于身份验证服务,该服务将使用blask_jwt_extendend生成JWT令牌。那就是我在python中生成令牌的方式,并扩展了烧瓶。
。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秘密键和JWT算法:
JWT_SECRET_KEY = "this-really-needs-to-be-changed"
JWT_ALGORITHM = "HS256"
在java中,我使用jjwt库(io.jsonwebtoken,jjwt,0.9.0(,解码jwt i:
Claims userJWT = Jwts.parser()
.setSigningKey("this-really-needs-to-be-changed")
.parseClaimsJwt(token)
.getBody();
但是,在Java中,如果我运行此操作,我会得到一个例外,我真的不明白问题是什么,因为算法是相同的,并且是令牌。
从几个小时开始,我现在就尝试弄清楚问题是什么,因为这对我没有意义,
例外:
: 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]
可能是键的编码问题,因为您的Java库需要一个base64Coded键。请参阅Defaultjwtparser
public JwtParser setSigningKey(String base64EncodedKeyBytes) {
请尝试:
Claims userJWT = Jwts.parser()
.setSigningKey(Base64.getEncoder().encodeToString("this-really-needs-to-be-changed"))
.parseClaimsJwt(token)
.getBody();