明瞳 2020-01-05
目录
jwt 是json web token
的缩写,是一种登录认证的认证方式
头.载荷.签名
三部分组成,中间由 .
拼接而成base64
可逆加密算法加密,签名采用HS256不可逆加密算法算法jwt认证组成介绍:
总共分为4部,只有在用户重新登录时才会再次签发新的token,如果原token没有超过过期时间,也是有效的,并且会在每个需要登录的接口中客户端会携带token与服务端校验
.
拼接产生三段式token总共可以分为五部来做:
.
切割成三段,如果不是三段,非法token看情况,一般不需要解密,因为固定不变的。
刷新算法就是在前发完token后,在token的有效时间内,用户每次提交请求时都会刷新该token的有效时间
刷新算法的实现:
安装
pip3 install djangorestframework-jwt
使用自带
设定好的jwt
from rest_framework_jwt.views import obtain_jwt_token urlpatterns = [ url(r'^login/',obtain_jwt_token), ] ''' path('login/', obtain_jwt_token)其实相当于path('login/', ObtainJSONWebToken.as_view()) 因为我们之间进源码可以看到 obtain_jwt_token = ObtainJSONWebToken.as_view() #获得 refresh_jwt_token = RefreshJSONWebToken.as_view() #刷新 verify_jwt_token = VerifyJSONWebToken.as_view() #验证 '''
测试接口:post请求
postman发生post请求 接口:http://127.0.0.1:8000/api/login/ 数据: { "username":"admin", "password":"admin123" } 返回一个token字符串 { "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTc3ODc0MzU0LCJlbWFpbCI6IiJ9.5z8Ya-mxj-oPSOwdXenSKUWf7M5pt3r8YVlFKu1cskY" }
""" jwt:json web tokens 采用json格式在web上传输的 认证字符串 jwt字符串:头.载荷.签名 头:公司基本信息、项目组基本信息、常规加密算法名 载荷:用户信息、过期时间 签名:头、载荷、秘钥 {头信息字典,采用base64加密算法}.{载荷信息字典,采用base64加密(base64编码)}.{头加密串、载荷加密串、服务器秘钥,采用hs256加密算法} base64是可逆的 hash256是不可逆加密 我们一般只会将账号信息,过期时间放载荷里面,一般把密码什么重要信息丢签名里面