我正在使用PyJWT==1.4.2来生成令牌,我打算使用这些令牌进行Firebase身份验证。
不幸的是,我无法使用任何第三方Python库,即使可以,我在尝试使用FirebaseTokenGenerator时也遇到了同样的困难。
在我的API中,我有一个函数,用于为用户名生成令牌。
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/这样的在线资源告诉我签名部分无效。
不确定这是否是进一步有用的信息,但当我尝试解码令牌时,会得到以下信息:
b'{"alg":"HS256","typ":"JWT"}{"something"[83 chars]\x88'对我做错了什么有什么想法吗?
发布于 2016-10-21 15:18:40
这确实是一个有效的令牌,如果您转到jwt.io并粘贴该令牌,然后更新用于验证其的秘密,使其与生成令牌的秘密相同,那么工具将指示签名是有效的。
默认情况下,jwt.io尝试使用HS256算法和secret的默认秘密验证签名。实际上,您正在使用HS256算法创建一个JWT,因此,要检查它是否有效,唯一需要做的事情就是更新秘密输入框以使用TESTSECRET。
此外,JWT的签名组件是原始二进制数据,如果试图将其解码为文本,则可能无法正确显示。关于JWT工作的更多信息,您可以检查开始使用JSON令牌。
发布于 2021-02-10 00:53:55
example_payload = {
'public_id': user.public_id,
'exp': datetime.datetime.utcnow()+datetime.timedelta(minutes=30)
}编码使用
token = jwt.encode(example_payload,app.config['SECRET_KEY'],algorithm="HS256")用于解码使用
data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"])基本上只是添加算法和ALGORITHMS=[]部分.否则,它会给我带来错误(登录后的操作令牌无效),但这修复了它。
在Python3中,您不需要在“jwt.encode()”之后使用".decode('UTF-8')“:它是为您做的。
还请检查您没有jwt和PyJWT包:
pip3 list如果同时安装了jwt和PyJWT,那么请执行以下操作:
pip3 uninstall jwt
pip3 uninstall PyJWT
pip3 install PyJWT重新运行应用程序
发布于 2021-03-08 11:19:49
我想在使用最新版本的PyJWT解码时,您需要使用该算法。
我也面临着同样的问题。使用算法参数求解。我使用的PyJwt版本是2.0.1。下面是示例代码。请试着让我知道它是否有效。
payload = jwt.decode("YOUR_JWT_TOKEN","YOUR_SECRET_KEY", algorithms=["HS256"])https://stackoverflow.com/questions/40179995
复制相似问题