DRF 三大认证之身份认证
路由组件补充
重写路由用来配置mappings
自定义路由需要导入Route, DynamicDetailRoute, SimpleRouter
三大认证
一、身份认证
用户分类:合法、游客、非法
1、如何进行身份认证
使用jwt认证规则。
jwt:json、web、token
优点:
- 数据库不需要储存token,所以服务器的IO操作会减少;
- 客户端存token,服务器只存储签发与校验算法,执行效率高;
- 签发与校验算法在多个服务器上可以统一,所以jwt认证规则下,服务器做集群可以非常便捷。
注意点:
- token必须要有多个部分组成,有能反解的部分,也有不能反解的部分。
- jwt都是三段式
- token中必须包含过期时间保证token的安全性与时效性(过期时间);
2、jwt认证规则原理
- jwt由
头.载荷.签名三部分组成; - 每一部分数据都是一个json字典,头和载荷采用
base64可逆加密算法加密;签名采用哈希HS256,不可逆加密。
3、jwt的组成
头(基本信息):可逆或不可逆采用的加密算法、公司名称、项目组信息、开发者信息
{
"company":"百度",
"...":"..."
}
载荷(核心信息):用户主键、用户账号、客户端设备信息、过期时间。。。
{
'pk':1,
'...':'...'
}
签名(安全信息):头的加密结果、服务器的安全码(盐)。。。
{
'header':'...',
'...':'...'
}
4、jwt的使用方法
4.1 签发算法
- 头内容写死(可以为空{}),公司、项目组信息都是固定不变的。
- 将数据字典转换成json字符串,再将json字符串加密成base64字符串。
- 载荷的内容,用户账号、客户端设备信息是由客户端提供,用户主键是客户端提供账号密码校验user表通过后才能确定,过期时间根据当前时间与配置的过期时长相结合产生;
- 将数据字典转换成json字符串,再将json字符串加密成base64字符串。
- 签名的内容,先将头的加密结果,载荷的加密结果作为成员,再从服务器上拿安全码(不能让任何客户端知道),也可以额外包含载荷中的部分(用户信息、客户端设备信息)。
- 将数据字典转换成json字符串,再将json字符串不可逆加密成HS256字符串。
- 将三个字符串用
.连接产生三段式token。
4.2 校验算法
- 从客户端提交的请求中拿到token,用
.分割成三段(如果不是三段,即为非法)。 - 第一段为头,可以不解密。
- 第二段是载荷,一定需要解密,先用base64解密成json字符串,再转换成python字典数据,进行信息校验:
- 通过用户主键与用户账号查询user表确定用户是否存在;
- 设备信息用本次请求提交的设备信息比对,确定前后是否是统一设备,决定是否对用户发送安全提示(短信、邮箱提示异地登录);IP、登陆地点同理;
- 过期时间与当前时间比对,该token是否在有效时间内;
- 第三段是签名,采用加密碰撞校验:
- 同样将头、载荷、加密字符串和数据库安全码形成json字典,转换成json字符串;
- 采用不可逆哈希HS256形成加密字符串
- 新的加密字符串与第三段签名碰撞比对,一致才能确认token为合法的。
- 前方算法都通过后,载荷校验得到的user对象,就是该token代表的用户(Django项目一般都会把登录用户放在request.user中)
4.3 刷新算法
- 要在签发token的载荷中,额外添加两个时间信息:
- 第一次签发token的时间;
- token的有效时间。
- 每次请求携带token,不仅走校验算法验证token是否合法,还要额外请求刷新token的接口,完成token的刷新。校验规则与校验算法差不多,但是要将过期时间后移(如果没有超过有效时间,则产生新token返回给客户端;如果超过了,就刷新失败,就要重新登录)。
- 所以服务器不仅要配置过期时间,还需配置最长刷新时间。
二、权限认证
三、节流认证(频率认证)
DRF 三大认证之身份认证的更多相关文章
- drf三大组件之频率认证组件
复习 """ 1.认证组件:校验认证字符串,得到request.user 没有认证字符串,直接放回None,游客 有认证字符串,但认证失败抛异常,非法用户 有认证字符串, ...
- DRF 三大认证的配置及使用方法
目录 三大认证 一.身份认证 1.身份认证配置 1.1 全局配置身份认证模块 1.2 局部配置身份认证模块 2.drf提供的身份认证类(了解) 3.rf-jwt提供的身份认证类(常用) 4.自定义身份 ...
- asp.net身份认证
在网上看到几篇比较好的文章很详细讲解了Form.Membership.以及Identity身份认证 Form身份认证: http://www.cnblogs.com/fish-li/archive/2 ...
- Windows下使用cmd启动Oracle EM和sql命令使用+主机身份认证
(1)cmd命令下使用sql命令 >sqlplus / as sysdba sql>select * from v$version; (2)cmd命令下启动Oracle EM 安装完ora ...
- 最简单易懂的Spring Security 身份认证流程讲解
最简单易懂的Spring Security 身份认证流程讲解 导言 相信大伙对Spring Security这个框架又爱又恨,爱它的强大,恨它的繁琐,其实这是一个误区,Spring Security确 ...
- 认识ASP.NET Windows身份认证
本文摘自:细说ASP.NET Windows身份认证 Forms身份认证虽然使用广泛,不过,如果是在 Windows Active Directory 的环境中使用ASP.NET, 那么使用Windo ...
- DRF框架(六)——三大认证组件之认证组件、权限组件
drf认证组件 用户信息表 from django.db import models from django.contrib.auth.models import AbstractUser class ...
- drf三大组件之认证组件与权限组件
复习 """ 视图家族 1.视图类:APIView.GenericAPIView APIView:作为drf的基础view:as_view()禁用csrf:dispatc ...
- 8) drf 三大认证 认证 权限 频率
一.三大认证功能分析 1)APIView的 dispath(self, request, *args, **kwargs) 2)dispath方法内 self.initial(request, *ar ...
随机推荐
- hdu 4738 Caocao's Bridges(割边)
题目链接 用tarjan求桥上的最小权值 #include<bits/stdc++.h> #define ll long long int using namespace std; inl ...
- AtCoder Beginner Contest 170
比赛链接:https://atcoder.jp/contests/abc170 A - Five Variables 题意 $5$ 个数中有 $1$ 个 $0$,判断是第几个. 代码 #include ...
- Codeforces Round #647 (Div. 2) A. Johnny and Ancient Computer
题目链接:https://codeforces.com/contest/1362/problem/A 题意 有一个正整数 $a$,可选择的操作如下: $a \times 2$ $a \times 4$ ...
- 【noi 2.6_3531】判断整除(DP)
题意:给一个正整数数列,可将其相加或相减,问是否有一个结果能被K整除. 解法:似上一题"糖果"的状态定义,f[i][j]表示是否有一个选了前 i 个数的结果模K余j. P.S. 可 ...
- Codeforces Round #540 (Div. 3) D2. Coffee and Coursework (Hard Version) (二分,贪心)
题意:有\(n\)个数,每次可以选\(k(1\le k\le n)\)个数,并且得到\(a_1+max(0,a_2-1)+max(0,a_3-2)+...+max(0,a_k-k+1)\)的贡献,问最 ...
- Codeforces Round #651 (Div. 2) A. Maximum GCD (思维)
题意:在\(1\)~\(n\)中找两个不相等的数使得他们的\(gcd\)最大. 题解:水题,如果\(n\)是偶数,那么一定取\(n\)和\(n/2\),\(n\)是奇数的话,取\(n-1\)和\((n ...
- Codeforces Round #515 (Div. 3) E. Binary Numbers AND Sum (二进制,前缀和)
题意:有两个\(01\)字符串\(a\)和\(b\),每次让\(a\)和\(b\)进行与运算,将值贡献给答案,然后将\(b\)右移一位,直到\(b=0\). 题解:因为\(a\)不变,而\(b\)每次 ...
- WPF 之命令(七)
一.前言 事件的作用是发布和传播一些消息,消息送达接收者,事件的使命也就完成了,至于消息响应者如何处理发送来的消息并不做规定,每个接收者可以使用自己的行为来响应事件.即事件不具有约束力. 命令 ...
- leetcode 2 两数相加 考虑溢出
先用int存了结果然后出错,int溢出了. 真是憨批嗷. 不用考虑保存结果,直接一位一位计算就行. 感觉被描述误导了. /** * Definition for singly-linked list. ...
- 计算机网络 part2
一.UDP协议 1.概述 UDP提供不可靠的服务,无连接(不存在建立连接的时延),首部开销相对TCP小,没有拥塞控制,提供最大努力交付,面向报文(无论多长的报文UDP也只加一个头部就往下发:TCP面向 ...