Django REST framework安全实践:轻松实现认证、权限与限流功能
创始人
2025-01-09 22:35:00
0

在这里插入图片描述

系列文章目录

  • 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…

文章目录

  • 系列文章目录
  • 前言
  • 一、认证
  • 二、权限
  • 三、限流
    • 1. 匿名用户全局限流
    • 2. 匿名用户局部限流
  • 四、认证、权限、限流全局配置示例


前言

    在本文中,我们将深入探讨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_CLASSESDEFAULT_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 = [AnonRateThrottle]         # 指明针对匿名用户进行限流,限流频率全局配置 

在项目配置文件中针对用户类型设置具体频率:

  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'     }  } 

在这里插入图片描述

相关内容

热门资讯

专业讨论!德扑之星真破解套路(... 专业讨论!德扑之星真破解套路(辅助挂)软件透明挂(有挂了解)-哔哩哔哩;人气非常高,ai更新快且高清...
每日必看!智星德州菠萝外挂检测... 每日必看!智星德州菠萝外挂检测(辅助挂)软件透明挂(有挂教学)-哔哩哔哩1、玩家可以在智星德州菠萝外...
透视透明挂!轰趴十三水有后台(... 轰趴十三水有后台赢率提升策略‌;透视透明挂!轰趴十三水有后台(辅助挂)软件透明挂(有挂详情)-哔哩哔...
发现玩家!德扑ai助手软件(辅... 发现玩家!德扑ai助手软件(辅助挂)透视辅助(有挂教学)-哔哩哔哩;玩家在德扑ai助手软件中需先进行...
一分钟了解!x-poker辅助... 一分钟了解!x-poker辅助软件(辅助挂)辅助透视(有挂攻略)-哔哩哔哩1、每一步都需要思考,不同...
一分钟揭秘!德州最新辅助器(辅... 一分钟揭秘!德州最新辅助器(辅助挂)透视辅助(有挂攻略)-哔哩哔哩;德州最新辅助器最新版本免费下载安...
玩家攻略推荐!德州辅助(辅助挂... 玩家攻略推荐!德州辅助(辅助挂)辅助透视(有挂了解)-哔哩哔哩是由北京得德州辅助黑科技有限公司精心研...
揭秘真相!pokernow德州... 《揭秘真相!pokernow德州(辅助挂)辅助透视(有挂介绍)-哔哩哔哩》 pokernow德州软件...
五分钟了解!德州之星辅助器(辅... 五分钟了解!德州之星辅助器(辅助挂)辅助透视(有挂透明)-哔哩哔哩1、很好的工具软件,可以解锁游戏的...
推荐一款!pokermaste... 1、推荐一款!pokermaster有外挂(辅助挂)透视辅助(有挂教学)-哔哩哔哩;详细教程。2、p...