Flask实现JWS身份校验

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 不存在")

【文章编写不易,如需转发请联系作者!】

猜你喜欢

转载自blog.csdn.net/qq_46170664/article/details/123015381