python web JWT认证

前后端分离之JWT认证方式

原文 https://www.jianshu.com/p/180a870a308a

JWT 即 json web token

为什么会使用JWT?

1*.http协议是无状态的*

2.如果使用传统方式,将session保存到数据库中,增大了服务器数据库存储压力

3.多数据库session需要时时同步

4.大型网站是多站点,多个域名组成的,使用set cookie ,浏览器因为跨域不会设置cookie

使用对称加密 用户 id 来形成 token

第三方支付的时候,要使用非对称加密


可通过URL POST参数  

或者在

HTTP header

发送

包含了用户的信息,避免了多次查询数据库(不包含敏感信息,如密码)

JWT组成

header + payload + signature

在这里插入图片描述

header

base64编码  header
payload
包含了用户信息 如ID

一些其他规范
iss(签发者)
exp(过期时间)
sub(面向的用户)
aud(接收方)
iat(签发时间)
Signature 签名

header_base64  +  payload_base64  + 秘钥

然后使用header中的签名 HS256
pip install PyJWT

>>> import jwt

>>> encoded_jwt = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')
>>> encoded_jwt
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg'

>>> jwt.decode(encoded_jwt, 'secret', algorithms=['HS256'])
{'some': 'payload'}

# 生成json web token

payload = {
	"id":user.id,
	"nick_name":user.nick_name,
	"exp":datetime.utcnow()
}

token = jwt.encode(payload, self.settings["secret_key"], algorithm='HS256')


re_data["token"] = token.decode("utf8")


#web 服务返回json
#self.finsh(re_data)

猜你喜欢

转载自blog.csdn.net/sunt2018/article/details/84573345