REST framework 三大认证组件

RBAC

基于用户权限访问控制的认证 - Role-Based Access Control

Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则、五表规则,Django采用的是六表规则

  • 三表规则: 用户表、角色表、权限表
  • 五表规则: 用户表、角色表、权限表、用户角色关系表、角色权限关系表
  • 六表规则: 用户表、角色表、权限表、用户角色关系表、角色权限关系表、用户权限关系表

django六表跨表查询

  • 用户表 -> 角色表 正向 groups,用户表 -> 权限 正向 user_permissions
  • 角色表 -> 用户表 反向 user_set,角色表 -> 权限 正向 permissions
  • 权限表 -> 用户表 反向 user_set,权限表 -> 角色表 反向 group_set

重点补充:如果自定义User表后,再另一个项目中采用原生User表,完成数据库迁移时,可能失败

  1. 卸载Django重新装
  2. 将django.contrib下面的admin、auth下的数据库迁移记录文件清空

三大认证组件

源码

APIView的dispath(self, request, *args, **kwargs)
dispath方法内 self.initial(request, *args, **kwargs) 进入三大认证

def initial(self, request, *args, **kwargs):
    ...
    # 认证组件 
    self.perform_authentication(request)
    # 权限组件
    self.check_permissions(request)
    # 频率组件
    self.check_throttles(request)

认证组件

校验用户 - 游客、合法用户、非法用户

  • 游客:代表校验通过,直接进入下一步校验(权限校验)
  • 合法用户:代表校验通过,将用户存储在request.user中,再进入下一步校验(权限校验)
  • 非法用户:代表校验失败,抛出异常,返回403权限异常结果

权限组件:

校验用户权限 - 必须登录、所有用户、登录读写游客只读、自定义用户角色

  • 认证通过:可以进入下一步校验(频率认证)
  • 认证失败:抛出异常,返回403权限异常结果

频率组件:

限制视图接口被访问的频率次数 - 限制的条件(IP、id、唯一键)、频率周期时间(s、m、h)、频率的次数(3/s)

  • 没有达到限次:正常访问接口
  • 达到限次:限制时间内不能访问,限制时间达到后,可以重新访问

 

请求响应流程步骤:

  1. 前端发送请求到达后端DRF
  2. Django的Wsgi将request格式化成字典
  3. 请求走APIView的as_view,禁用CSRF,再走APIView的dispatch方法
  4. 请求模块,二次封装request
  5. 解析模块,解析countType
  6. 三大认证 认证组件,根据前端传来的认证信息校验出 游客 登录用户 非法用户
  7. 三大认证 权限组件,根据合法用户的不同身份给不同的权限
  8. 三大认证 频率组件,为接口设置频率限制
  9. 进入视图类,完成代码逻辑
  10. 异常模块:若三大认证或视图类有异常则进入, 该模块返回值为None,异常未被DRF处理, 返回值为有值,异常被DRF处理
  11. 响应模块, 将封装的响应信息交由View类中as_view的view方法返回给前台

登录接口流程: 

前端 --> 请求 --> 后端(登录接口局部禁用认证和权限认证) --> 视图类中根据username和pwd获取用户对象 --> 根据用户对象生成认证信息 token --> 将token返回给前端

其他接口流程:

前端 -->请求(携带认证信息'token') --> 后端 --> 经过三大认证(在认证模块中校验出合法用户, 在经过权限和频率认证) --> 视图类 --> 数据响应给前端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值