Django rest-framework的jwt认证

时间:2020-01-06 00:27:05   收藏:0   阅读:192

jwt认证

jwt 是json web token的缩写,是一种登录认证的认证方式

jwt认证和普通session认证的区别

  1. session需要保存至服务端数据库中,而jwt服务器不需要存储token,服务器的IO操作会减少(没有IO写操作)
  2. 由客户端存储token信息,服务端只存储签发和校验的算法,服务端代码执行效率高
  3. 采用三段式,token中必须包含过期时间,保证token的安全性和时效性

jwt认证组成

jwt认证组成介绍:

jwt的签发算法

总共分为4部,只有在用户重新登录时才会再次签发新的token,如果原token没有超过过期时间,也是有效的,并且会在每个需要登录的接口中客户端会携带token与服务端校验

头部算法

载荷部分的算法

签名部分的算法

连接生成token

jwt的校验算法

总共可以分为五部来做:

切分

解密头部

看情况,一般不需要解密,因为固定不变的。

解密载荷

碰撞校验签名

校验用户对象

jwt的刷新算法

刷新算法就是在前发完token后,在token的有效时间内,用户每次提交请求时都会刷新该token的有效时间

刷新算法的实现:

jwt认证的优点

DRF中的jwt认证

安装

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是不可逆加密
我们一般只会将账号信息,过期时间放载荷里面,一般把密码什么重要信息丢签名里面

原文:https://www.cnblogs.com/ghylpb/p/12154343.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!