zoukankan      html  css  js  c++  java
  • DRF 三大认证之身份认证

    路由组件补充

    重写路由用来配置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. 所以服务器不仅要配置过期时间,还需配置最长刷新时间。

    二、权限认证

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

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/bowendown/p/12130227.html
Copyright © 2011-2022 走看看