使用 PyJWT 的 Jwt 解码引发签名验证失败

Posted

技术标签:

【中文标题】使用 PyJWT 的 Jwt 解码引发签名验证失败【英文标题】:Jwt Decode using PyJWT raises Signature verification failed 【发布时间】:2018-03-19 11:09:53 【问题描述】:

我在 django 视图中解码 jwt 令牌时遇到了一个奇怪的问题。如果我尝试 jwt.decode('encoded_token', 'secret') 那么我会看到“签名验证失败”消息。为了逃避这个问题,我将验证标志设置为 False:

jwt.decode('eroded_token', 'secret', verify=False)

这使解码的有效负载没有错误,但我试图弄清楚如何在不将验证标志设置为 False 的情况下成功验证令牌。有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

这不是您要验证的实际 JWT 令牌 - 它应该看起来更像这样 - 三个字符串与句点连接在一起(当然也可以创建为实际的 JSON Web 令牌):

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NTk1ODM2MjAsImV4cCI6MTU1OTU4MzY4MH0.P9bO39jqwB3YHf7XSo16OSLvcNMYbm__hrf70J9VzYw

您可以通过以下方式创建网络令牌:

import jwt
encoded = jwt.encode('some': 'payload', 'secret', algorithm='HS256')
print(encoded)

O/P:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg

`

取自https://github.com/jpadilla/pyjwt

【讨论】:

以上是关于使用 PyJWT 的 Jwt 解码引发签名验证失败的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pyJWT 验证此 JWT 上的签名?

如何使用带有公共 PEM 证书的 python PyJWT 验证 JWT?

pyJWT

使用 PHP 的 JWT“签名验证失败”

在python中使用PyJWT解码jwt令牌给出错误算法不支持

使用 PyJWT 在 Python 中解码 Firebase JWT