JWS(JSON Web Signature) 是JWT(Json Web Token) 的一种实现方式.
JWS的实现大体有两步:
-
生成token,将token存上下文序列:Serializer
-
验证token,提取数据
1:生成token,将token存上下文序列
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
serializer = Serializer(current_app.config['SECRET_KEY'], expires_in=3600)
# 存入token信息,该数据是可以被解析出来的,因此可以存放任何的数据
data = ['name':'张三']
token = serializer.dumps(data).decode('utf8')
print(token)
return token
2:验证token,提取数据
前端将token存入headers中传入后端,后端获取token进行验证:
token = request.headers.get(Utils.TOKEN_NAME)
验证token(在jws中会自动校验如果token 过期 / 无效则会分别被SignatureExpired,BadSignature捕获异常):
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, SignatureExpired, BadSignature
from flask import g
if token:
# 从上下文中提取配置的值
serializer = Serializer(current_app.config['SECRET_KEY'])
try:
# 校验token,如果token 过期 / 无效则会被捕获,如果正确则会解析出token存入的数据
data = serializer.loads(token)
# 将数据存入g中,g是flask内置定义的一个全局变量,将数据存入g后,可以在项目的任何地方调用g来获取存入的数据
g.data = data
return
except SignatureExpired as e:
print("token 过期")
except BadSignature as e:
print("token 无效")
else:
print("token 不存在")
【文章编写不易,如需转发请联系作者!】