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

    二、权限认证

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

  • 相关阅读:
    路径查看linux 向内核注册总线例子
    属性应用Android Manifest之<provider>元素中文注释
    序数序列hdu 1394
    大分类分类Zen Cart大分类下直接显示产品列表插件
    虚拟化运行[OpenStack] VMWare产品介绍
    名称磁盘Linux系统监控的CPU、Mem、IO的OID
    端口服务器黑马韩前成linux从入门到精通proftpd服务器配置
    主库配置关于Dataguard Online redo log 和 Standby redo log
    尺寸品牌Jquery 仿淘宝京东多条件筛选 可自行结合ajax加载
    设置编辑(iPhone/iPad开发)设置UITextView为不可编辑状态
  • 原文地址:https://www.cnblogs.com/bowendown/p/12130227.html
Copyright © 2011-2022 走看看