首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回无效令牌签名的PyJWT

返回无效令牌签名的PyJWT
EN

Stack Overflow用户
提问于 2016-10-21 15:04:51
回答 5查看 19.4K关注 0票数 11

我正在使用PyJWT==1.4.2来生成令牌,我打算使用这些令牌进行Firebase身份验证。

不幸的是,我无法使用任何第三方Python库,即使可以,我在尝试使用FirebaseTokenGenerator时也遇到了同样的困难。

在我的API中,我有一个函数,用于为用户名生成令牌。

代码语言:javascript
复制
118     def generate_token(self, username):
119         payload = {
120             'something': 'Here',
121         }   
122         secret = "TESTSECRET"
123         token = jwt.encode(
124             payload,
125             secret,
126             algorithm='HS256')
127         return token

我从这个函数中得到的一个令牌示例是:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21ldGhpbmciOiJIZXJlIn0.fpIMSRJ3AAL30LIDwHJM9ZOumdRzS7yooiiUgMPms2Y

不幸的是,这不是一个有效的令牌。像https://jwt.io/这样的在线资源告诉我签名部分无效。

不确定这是否是进一步有用的信息,但当我尝试解码令牌时,会得到以下信息:

代码语言:javascript
复制
b'{"alg":"HS256","typ":"JWT"}{"something"[83 chars]\x88'

对我做错了什么有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-10-21 15:18:40

这确实是一个有效的令牌,如果您转到jwt.io并粘贴该令牌,然后更新用于验证其的秘密,使其与生成令牌的秘密相同,那么工具将指示签名是有效的。

默认情况下,jwt.io尝试使用HS256算法和secret的默认秘密验证签名。实际上,您正在使用HS256算法创建一个JWT,因此,要检查它是否有效,唯一需要做的事情就是更新秘密输入框以使用TESTSECRET

此外,JWT的签名组件是原始二进制数据,如果试图将其解码为文本,则可能无法正确显示。关于JWT工作的更多信息,您可以检查开始使用JSON令牌

票数 10
EN

Stack Overflow用户

发布于 2021-02-10 00:53:55

代码语言:javascript
复制
example_payload = {
    'public_id': user.public_id,
    'exp': datetime.datetime.utcnow()+datetime.timedelta(minutes=30)
}

编码使用

代码语言:javascript
复制
token = jwt.encode(example_payload,app.config['SECRET_KEY'],algorithm="HS256")

用于解码使用

代码语言:javascript
复制
data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"])

基本上只是添加算法和ALGORITHMS=[]部分.否则,它会给我带来错误(登录后的操作令牌无效),但这修复了它。

在Python3中,您不需要在“jwt.encode()”之后使用".decode('UTF-8')“:它是为您做的。

还请检查您没有jwt和PyJWT包:

代码语言:javascript
复制
pip3 list

如果同时安装了jwt和PyJWT,那么请执行以下操作:

代码语言:javascript
复制
pip3 uninstall jwt
pip3 uninstall PyJWT
pip3 install PyJWT

重新运行应用程序

票数 7
EN

Stack Overflow用户

发布于 2021-03-08 11:19:49

我想在使用最新版本的PyJWT解码时,您需要使用该算法。

我也面临着同样的问题。使用算法参数求解。我使用的PyJwt版本是2.0.1。下面是示例代码。请试着让我知道它是否有效。

代码语言:javascript
复制
payload = jwt.decode("YOUR_JWT_TOKEN","YOUR_SECRET_KEY", algorithms=["HS256"])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40179995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档