jwt全称json web token,用于认证用户身份信息的,即保持会话状态

安装pip install pyjwt

方法

参数说明

返回值

encode(payload, key, algorithm)

payload:字典类型的私有声明和公有声明,例如:{'username':'zhangsan','exp':1237365239}key:自定义的字符串,用于加密的key值,不要外泄algorithm:声明你要用哪种算法签名,例如HS256

token串,返回类型:bytes

 

 

 

decode(token,key)

token:token串,参数类型bytes/strkey:自定义的加密key,需要跟encode中的key保持一直,参数类型strissuer:发布者,若encode中的payload添加了iss字段,则可针对该字段进行校验,参数类型straudience:签发的受众群体,若encode内的payload中添加了aud字段,则可针对该字段校验,参数类型str

payload明文,返回类型是dict若iss校验失败则抛出jwt.inavlidissuerError若aud校验失败,则抛出jwt.InvalidAudienceError

加密解密示例:

import jwt
#加密
s = jwt.encode({'name': 'zhangsan'}, '123456', algorithm='HS256')
print(s)
#解密
a = jwt.decode(s, '123456', algorithms='HS256')
print(a)

特殊说明:

若encode中payload添加了exp字段,则exp字段的值需为:当前时间戳+此token的有效期时间,例如:

希望token300秒后过期:

{'exp':time.time() + 300};

在执行decode时,若检查到exp字段,且token过期,则会抛异常jwt.ExpiredSignatureError,

示例:

import jwt
import time
s = jwt.encode({'name': 'zhangsan','exp':time.time()+3}, '123456', algorithm='HS256')
print(s)
time.sleep(4)

a = jwt.decode(s, '123456', algorithms='HS256')
print(a)

前后端分离场景下使用JWT:

原则:

1,JWT签发后,交由浏览器保存

2,浏览器可将其存储在”本地存储“中,不要存到cookies里,防范csrf攻击

3,需要用户登录才能使用此功能,前端ajax中需要将jwt传至后端,可放在请求头中发送