发现问题
引用我另一篇博文的内容:
Python中的pyjwt模块内置header固定为 { “typ”: “JWT”,“alg”: “HS256”}, 只能添加无法修改。
在header的typ和alg顺序不同时,会导致Base64编码后的数据不同,具体数据如下。
{ “typ”: “JWT”,“alg”: “HS256”} Base64=> eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
{ “alg”: “HS256”,“typ”: “JWT”} Base64=> eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
分析问题
使用不同的header进行测试,查看结果
import jwt
def get_token(header):
payload = {"name": "ITHOMIA", "email": "[email protected]", "qq": "3339118668"}
secret = 'ITHOMIA'
return jwt.encode(headers=header, payload=payload, key=secret).decode().split('.')[0]
if __name__ == '__main__':
header1 = {"typ": "JWT", "alg": "HS256"}
header2 = {"alg": "HS256", "typ": "JWT"}
header4 = {"typ": "JWT"}
header5 = {"alg": "HS256"}
header3 = {}
header6 = {'name': '左素'}
header7 = {"alg": "HS256", "typ": "JWT",'name': '左素'}
print(get_token(header1))
print(get_token(header2))
print(get_token(header3))
print(get_token(header4))
print(get_token(header5))
print(get_token(header6))
print(get_token(header7))
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsIm5hbWUiOiJcdTVkZTZcdTdkMjAifQ
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsIm5hbWUiOiJcdTVkZTZcdTdkMjAifQ
由输出结果可知:
在header中不包含除"typ","HS256"以外的元素时:
header会被初始化为:{"typ": "JWT", "alg": "HS256"}
在header中包含除"typ","HS256"以外的元素时:
header会被生成为:{"typ": "JWT", "alg": "HS256", 传入的元素}
解决问题
按住command点击
jwt
模块进入__init__.py
按住command点击
PyJWS
模块进入api_jws.py
的class PyJWS
将
api_jws.py
的class PyJWS
中第93行的header置空:
header = {"typ": "JWT", "alg": "HS256"}
改为
header = {}
再次测试
用同样的代码再次进行测试,得到想要的运行结果:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
e30
eyJ0eXAiOiJKV1QifQ
eyJhbGciOiJIUzI1NiJ9
eyJuYW1lIjoiXHU1ZGU2XHU3ZDIwIn0
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsIm5hbWUiOiJcdTVkZTZcdTdkMjAifQ
总结
在模块内置代码中,已经默认设置 header = {"typ": "JWT", "alg": "HS256"}
。如果再次传入header,会调用update()
方法来更新header。update()
方法只检查字段不检查顺序,同时也不会删除已有的字段,所以才会出现传入header无效的情况。
编辑于 Tue Feb 4 09:37:52 2020
左素