python jwt
jwt -> json web token 一般用于前后端分离项目的用户认证。
传统校验需要把token保存在服务端。而jwt不会保存在服务端,通过客户端给的token和算法进行验证。
jwt包括三段字符串,并用点分隔。
token可以放到url里面,放到请求头里面。
返回
第一个是类型,第二个是非敏感数据和时间,第三个是防止一和二被修改。
-
第一段字符串:HEADER,内部包含算法/token类型,json转化成字符串,然后做base64url加密,这一段是固定的。
{ "alg":"HS256", "typ":"JWT" }
-
第二段字符串:payload。放你想放的信息。json转化成字符串,然后做base64url加密,由于可以反解出来,所以不要放敏感信息。
{ "id":"14324123", "name":"asdfsa", "exp" : 1324234324 // 超时时间 }
-
第三段字符串:
- 把1,2部分用”.“拼接起来
- 对前两部分进行HS256加密+加盐
- 对HS256加密后的密文再做base64url加密
验证
- 切割
- 从第二段里面拿到超时时间看是否超时。
- 第三段由于HS256不能解密,于是将一二段拼接再次进行HS256加密+加盐,与原来的base64解密的第三段进行比较。判断是否被篡改。
代码实现
安装:
pip install pyjwt
生成关键代码:
import jwt
result = jwt.encode(payload=payload, key=SALT)
校验关键代码:
import jwt
payload = jwt.decode(token, SALT, algorithms="HS256")