魏晓东 发表于 2024-7-10 20:21:06

Django REST framework安全实践:轻松实现认证、权限与限流功能

https://img-blog.csdnimg.cn/direct/a61fd1501054444ab7e505aae5375fa4.gif#pic_center
系列文章目录

   

[*]Django入门全攻略:从零搭建你的第一个Web项目
[*]Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作
[*]Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解
[*]Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
[*]跨域问题与Django办理方案:深入剖析跨域原理、哀求处置惩罚与CSRF防护
[*]Django视图层探索:GET/POST哀求处置惩罚、参数通报与响应方式详解
[*]Django路由与会话深度探索:静态、动态路由分发,以及Cookie与Session的奥秘
[*]Django API开辟实战:前后端分离、Restful风格与DRF序列化器详解
[*]Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
[*]Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
[*]Django REST framework中GenericAPIView与混入扩展类详解
[*]Django REST framework视图集与路由详解:深入理解ViewSet、ModelViewSet与路由映射器
[*]Django中心件探索:揭秘中心件在Web应用中的守护脚色与实战应用
[*]Django REST framework数据展示技巧:分页、过滤与搜索的实用配置与实践
[*]Django REST framework安全实践:轻松实现认证、权限与限流功能
[*]努力学习0.0ing…


媒介

    在本文中,我们将深入探讨Django REST framework中的三大核心组件:认证、权限与限流。首先,我们将揭示认证在掩护API访问权限、验证用户身份方面的关键作用,并介绍怎样在Django REST framework中配置和使用差别的认证方案。接着,我们将探讨权限控制,学习怎样限定差别用户对API资源的访问,确保敏感数据的安全。最后,我们将讨论限流技术,了解怎样通过限定哀求频率来防止API被滥用,保障服务的稳定性和可用性。
一、认证

   Django 自带一个用户验证体系。它负责处置惩罚用户账号、组、权限和基于cookie的用户会话。
Django 验证体系处置惩罚验证和授权。简朴来说,验证检验用户是否是他们的用户,授权决定已验证用户能做什么。
    认证体系由以下部分组成:


[*]用户
[*]权限:二进制(是/否)标识指定用户是否可以执行特定任务。
[*]组:将标签和权限应用于多个用户的一般方法。
[*]可配置的密码哈希化体系
[*]为登任命户或限定内容提供表单和视图工具
[*]可插拔的后端体系
    Django 里的验证体系旨在通用化,不提供一些常见的 web 验证体系的特性。其中一些常见问题的办理方案已在第三方包中实现。


[*]密码强度查抄
[*]限定登录尝试
[*]针对第三方的身份验证(比方OAuth)
[*]对象级权限
    可以在配置文件中配置全局默认的认证方案,认证需要和权限一起使用
#settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':(

      #基本认证
       'rest_framework.authentication.BasicAuthentication',
                # session认证
       'rest_framework.authentication.SessionAuthentication',
    ),
)
   认证失败会有两种可能的返回值:


[*]401 Unauthorized 未认证
[*]403 Permission Denied 权限被克制
二、权限

   权限控制 可以限定用户对于视图的访问和对于具体数据对象的访问。

在执行视图的dispatch()方法前,会先举行视图访问权限的判定。在通过get_object()获取具体对象时,会举行对象访问权限的判定
    可以在配置文件中设置默认的权限管理类,如:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
      'rest_framework.permissions.IsAuthenticated',
    )
}
   如果未指明,则采用如下默认配置:
REST_FRAMEWORK = {
'DEFAULT PERMISSION CLASSES' : (
        'rest _framework.permissions.ALLowAny'
        )
}
   提供的权限:


[*]AllowAny 允许全部效户
[*]IsAuthenticated 仅通过认证的用户
[*]IsAdminUser 仅管理员用户
[*]IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取
三、限流

   限流与权限类似,因为它确定是否应该授权哀求。 限流阀 指示了一种临时状态,并用于控制客户端可以对API举行的哀求速率。
1. 匿名用户全范围流

   可以对接口访问的频次举行限定,以减轻服务器压力。特殊是限定爬虫的抓取。
    在配置文件中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES举行全局配置:
REST_FRAMEWORK = {
      'DEFAULT_THROTTLE_CLASSES': (
          # 限制所有匿名未认证用户,使用IP区分用户
          'rest_framework.throttling.AnonRateThrottle',
          #认证用户的限流
          'rest_framework.throttling.UserRateThrottle',
      ),
      'DEFAULT_THROTTLE_RATES': {
          # 可以使用 second, minute, hour 或day来指明周期
          'anon': '3/minute',
          'user': '5/minute'
      }
}
2. 匿名用户局部限流

   视图中使用throttle_classes属性设置限流用户类型
from rest_framework.generics import ListAPIView
from serializer import UserSerializer, User

from rest_framework.throttling import AnonRateThrottle



class UserView(ListAPIView):
      queryset = User.objects.all()
      serializer_class = UserSerializer
      throttle_classes =
      # 指明针对匿名用户进行限流,限流频率全局配置
   在项目配置文件中针对用户类型设置具体频率:
REST_FRAMEWORK = {
      'DEFAULT_THROTTLE_RATES': {
          # 可以使用 second, minute, hour 或day来指明周期
          'anon': '3/minute',
          'user': '5/minute'
      }
}
四、认证、权限、限流全局配置示例

# settings.py
# 认证,权限,限流
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES':(
      #基本认证
      'rest_framework.authentication.BasicAuthentication',

      # session认证
      'rest_framework.authentication.SessionAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
      'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_THROTTLE_CLASSES': (
          # 限制所有匿名未认证用户,使用IP区分用户
          'rest_framework.throttling.AnonRateThrottle',
          #认证用户的限流
          'rest_framework.throttling.UserRateThrottle',
    ),
    'DEFAULT_THROTTLE_RATES': {
          # 可以使用 second, minute, hour 或day来指明周期
          'anon': '3/minute',
          'user': '5/minute'
    }

}
https://img-blog.csdnimg.cn/direct/856076db2d46428dbaa94b453557fad2.gif#pic_center

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Django REST framework安全实践:轻松实现认证、权限与限流功能