路由组件补充

重写路由用来配置mappings

自定义路由需要导入Route, DynamicDetailRoute, SimpleRouter

三大认证

一、身份认证

用户分类:合法、游客、非法

1、如何进行身份认证

使用jwt认证规则。

jwt:json、web、token

优点:

  1. 数据库不需要储存token,所以服务器的IO操作会减少;
  2. 客户端存token,服务器只存储签发与校验算法,执行效率高;
  3. 签发与校验算法在多个服务器上可以统一,所以jwt认证规则下,服务器做集群可以非常便捷。

注意点:

  1. token必须要有多个部分组成,有能反解的部分,也有不能反解的部分。

    • jwt都是三段式
  2. token中必须包含过期时间保证token的安全性与时效性(过期时间);

2、jwt认证规则原理

  1. jwt由头.载荷.签名三部分组成;
  2. 每一部分数据都是一个json字典,头和载荷采用base64可逆加密算法加密;签名采用哈希HS256,不可逆加密。

3、jwt的组成

  1. 头(基本信息):可逆或不可逆采用的加密算法、公司名称、项目组信息、开发者信息

    {
    "company":"百度",
    "...":"..."
    }
  2. 载荷(核心信息):用户主键、用户账号、客户端设备信息、过期时间。。。

    {
    'pk':1,
    '...':'...'
    }
  3. 签名(安全信息):头的加密结果、服务器的安全码(盐)。。。

    {
    'header':'...',
    '...':'...'
    }

4、jwt的使用方法

4.1 签发算法

  1. 头内容写死(可以为空{}),公司、项目组信息都是固定不变的。

    • 将数据字典转换成json字符串,再将json字符串加密成base64字符串。
  2. 载荷的内容,用户账号、客户端设备信息是由客户端提供,用户主键是客户端提供账号密码校验user表通过后才能确定,过期时间根据当前时间与配置的过期时长相结合产生;
    • 将数据字典转换成json字符串,再将json字符串加密成base64字符串。
  3. 签名的内容,先将头的加密结果,载荷的加密结果作为成员,再从服务器上拿安全码(不能让任何客户端知道),也可以额外包含载荷中的部分(用户信息、客户端设备信息)。
    • 将数据字典转换成json字符串,再将json字符串不可逆加密成HS256字符串。
  4. 将三个字符串用.连接产生三段式token。

4.2 校验算法

  1. 从客户端提交的请求中拿到token,用.分割成三段(如果不是三段,即为非法)。
  2. 第一段为头,可以不解密。
  3. 第二段是载荷,一定需要解密,先用base64解密成json字符串,再转换成python字典数据,进行信息校验:
    • 通过用户主键与用户账号查询user表确定用户是否存在;
    • 设备信息用本次请求提交的设备信息比对,确定前后是否是统一设备,决定是否对用户发送安全提示(短信、邮箱提示异地登录);IP、登陆地点同理;
    • 过期时间与当前时间比对,该token是否在有效时间内;
  4. 第三段是签名,采用加密碰撞校验:
    • 同样将头、载荷、加密字符串和数据库安全码形成json字典,转换成json字符串;
    • 采用不可逆哈希HS256形成加密字符串
    • 新的加密字符串与第三段签名碰撞比对,一致才能确认token为合法的。
  5. 前方算法都通过后,载荷校验得到的user对象,就是该token代表的用户(Django项目一般都会把登录用户放在request.user中)

4.3 刷新算法

  1. 要在签发token的载荷中,额外添加两个时间信息:

    • 第一次签发token的时间;
    • token的有效时间。
  2. 每次请求携带token,不仅走校验算法验证token是否合法,还要额外请求刷新token的接口,完成token的刷新。校验规则与校验算法差不多,但是要将过期时间后移(如果没有超过有效时间,则产生新token返回给客户端;如果超过了,就刷新失败,就要重新登录)。
  3. 所以服务器不仅要配置过期时间,还需配置最长刷新时间。

二、权限认证

三、节流认证(频率认证)

DRF 三大认证之身份认证的更多相关文章

  1. drf三大组件之频率认证组件

    复习 """ 1.认证组件:校验认证字符串,得到request.user 没有认证字符串,直接放回None,游客 有认证字符串,但认证失败抛异常,非法用户 有认证字符串, ...

  2. DRF 三大认证的配置及使用方法

    目录 三大认证 一.身份认证 1.身份认证配置 1.1 全局配置身份认证模块 1.2 局部配置身份认证模块 2.drf提供的身份认证类(了解) 3.rf-jwt提供的身份认证类(常用) 4.自定义身份 ...

  3. asp.net身份认证

    在网上看到几篇比较好的文章很详细讲解了Form.Membership.以及Identity身份认证 Form身份认证: http://www.cnblogs.com/fish-li/archive/2 ...

  4. Windows下使用cmd启动Oracle EM和sql命令使用+主机身份认证

    (1)cmd命令下使用sql命令 >sqlplus / as sysdba sql>select * from v$version; (2)cmd命令下启动Oracle EM 安装完ora ...

  5. 最简单易懂的Spring Security 身份认证流程讲解

    最简单易懂的Spring Security 身份认证流程讲解 导言 相信大伙对Spring Security这个框架又爱又恨,爱它的强大,恨它的繁琐,其实这是一个误区,Spring Security确 ...

  6. 认识ASP.NET Windows身份认证

    本文摘自:细说ASP.NET Windows身份认证 Forms身份认证虽然使用广泛,不过,如果是在 Windows Active Directory 的环境中使用ASP.NET, 那么使用Windo ...

  7. DRF框架(六)——三大认证组件之认证组件、权限组件

    drf认证组件 用户信息表 from django.db import models from django.contrib.auth.models import AbstractUser class ...

  8. drf三大组件之认证组件与权限组件

    复习 """ 视图家族 1.视图类:APIView.GenericAPIView APIView:作为drf的基础view:as_view()禁用csrf:dispatc ...

  9. 8) drf 三大认证 认证 权限 频率

    一.三大认证功能分析 1)APIView的 dispath(self, request, *args, **kwargs) 2)dispath方法内 self.initial(request, *ar ...

随机推荐

  1. 小程序navigateTo和redirectTo跳转的区别与应用

    最近在做小程序的跳转,发现navigateTo的跳转无法满足业务需求,所以特地记录下 业务需求 类似一个淘宝的在订单界面选择地址的功能,从A页面点击跳转到B页面的地址列表页面,B页面可以选择已有的地址 ...

  2. 从NMEA0183到GNSS定位数据获取(一)原理篇

    作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:Conscience_Remains 总述 GPS我们都知道,一种用来全球定位的系统,后来俄罗斯推出了格洛纳斯定位系统,中国推出了北斗定位,欧盟有 ...

  3. ogn1.MethodFailedException:Method "xxx" failed for object xxx

    问题描述:初学ssh写了个小项目,访问界面出现以下错误 java. lang. NoSuchllethodError: org. hi bernate. SessionF actory. openSe ...

  4. workflow定时任务部分失败

    workflow遇到一个问题,每天定时任务导致部分失败,截图如下 目前这个问题现场出现过是重启wf解决的 ,但是也给研发排查了,根本原因不清楚,不确保现场还会再遇到.

  5. hdu 6704 K-th occurrence(后缀数组+可持久化线段树)

    Problem Description You are given a string S consisting of only lowercase english letters and some q ...

  6. 2020牛客暑期多校训练营(第八场)Interesting Computer Game

    传送门:Interesting Computer Game 题意 给出n对数,你可以操作n次,每次操作只能在下面三种中选择一种,问最多可以选多少个不同的数字. 什么都不做 如果a[i]以前没选过,那么 ...

  7. AtCoder Beginner Contest 161

    比赛链接:https://atcoder.jp/contests/abc161/tasks AtCoder Beginner Contest 161 第一次打AtCoder的比赛,因为是日本的网站终于 ...

  8. poj3757 Training little cats

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11496   Accepted: 2815 Description Face ...

  9. Codeforces Round #565 (Div. 3) C. Lose it! (思维)

    题意:给你一串只含\(4,8,15,16,23,42\)的序列,如果它满足长度是\(6\)的倍数并且有\(\frac {k}{6}\)个子序列是\([4,8,15,16,23,42]\),则定义它是好 ...

  10. kafka——集群安裝部署(自带zookeeper)

    kafka系列文章 第一章 linux单机安装kafka 第二章 kafka--集群安裝部署(自带zookeeper) 一.kafka简介 kafka官网:http://kafka.apache.or ...