首页 > 其他分享 >Django REST framework安全实践:轻松实现认证、权限与限流功能

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

时间:2024-06-22 09:02:49浏览次数:11  
标签:权限 用户 REST 认证 framework 限流 Django

在这里插入图片描述

系列文章目录


文章目录


前言

    在本文中,我们将深入探讨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'
    }

}

在这里插入图片描述

标签:权限,用户,REST,认证,framework,限流,Django
From: https://blog.csdn.net/m0_48173416/article/details/139783489

相关文章

  • vscode+robotframework的实践-selenium(更新中)
    一说明上一次使用robotframework还是2019年毕业刚进入工作的时候,使用的是robotframework的官方配套编辑器RIDE进行自动化脚本编写,在使用的过程中偶尔会遭遇卡顿、闪退等问题,当时排查问题大多数是因为RIDE自身与python版本以及操作系统之间的兼容性问题导致的,那时候没有编程意识......
  • 使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
    你好,这里是codetrend专栏“SpringCloud2023实战”。本文简单介绍SpringCloud2023中使用Sentinel进行限流管理。前言随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控......
  • 062篇 - 实用的库和框架(Useful Libraries and Frameworks)
    大家好,我是元壤教育的张涛,一名知识博主,专注于生成式人工智能(AIGC)各领域的研究与实践。我喜欢用简单的方法,帮助大家轻松掌握AIGC应用技术。我的愿景是通过我的文章和教程,帮助1000万人学好AIGC,用好AIGC。在本章中,我们将探讨一系列能够显著提高提示词工程师工作效率的实用库......
  • ORION Space Scene Generation Framework
    ORION太空场景生成框架是一个涵盖所有太空场景生成方面的系统,从程序化的行星和宇宙飞船到任何相关的特效,支持所有管道。重要提示!!!:ORION资产可以从SkyMasterULTIMATE升级,从而可以与SkyMasterULTIMATE的全容积行星云和大气效果相结合,最适合在云层中飞行。这是该系统的第一......
  • 【重写SpringFramework】第一章beans模块:填充对象(chapter 1-6)
    1.前言在对象实例化之后,我们需要对一些字段进行赋值,这一过程称之为对象的填充(populate)。填充对象由两部分组成,一是属性访问,二是自动装配(autowire)。属性访问的功能已经介绍过了,本节主要讨论的是自动装配的问题。自动装配也称依赖注入,包括两个部分,即环境变量解析和对象解析,......
  • 【重写SpringFramework】第一章beans模块:Bean的销毁(chapter 1-9)
    1.前言Bean的生命周期包括初始化和销毁操作,上节介绍了Bean初始化流程,本节来看Bean的销毁流程是如何实现的。在实际应用中,绝大多数对象并不需要执行销毁操作,但某些对象本身管理着一定的资源。当Spring容器关闭时,所有的对象都会被虚拟机回收。在此之前,这些特殊的对象......
  • 【重写SpringFramework】第一章beans模块:Bean的初始化(chapter 1-8)
    1.前言前边我们介绍了创建实例和填充对象的流程,这是整个创建流程最重要的工作。有时候用户需要对Bean进行自定义的操作,这一过程称为初始化。此外,还有一些比较特殊的对象,本身管理着一定的资源,当对象销毁时需要释放这些资源,因此我们还需要相应的销毁操作。初始化和销毁操作......
  • 服务器雪崩的应对策略之----限流
    限流是一种控制流量的技术,旨在防止系统在高并发请求下被压垮。通过限流,可以确保系统在负载高峰期依然能保持稳定运行。常见的限流策略包括令牌桶算法、漏桶算法、计数器算法和滑动窗口算法。常见的限流方法1.令牌桶算法(TokenBucketAlgorithm)2.漏桶算法(LeakyBu......
  • forest简单使用
    相对比restTemplate,forest形式和feign类似,接口调用清晰明了<dependency><groupId>com.dtflys.forest</groupId><artifactId>forest-spring-boot-starter</artifactId><version>1.5.36</version></dependency>......
  • 【New Relic】给基于.NET Framework 4.0 的 exe 程序安装New Relic
    由于.NETFramework4.0是比较古老的版本,只有NewRelic7.0以下的版本才会支持.NETFramework4.0的引用程序。 Technicalsupportfor.NETFramework4.0orlower 你可以参考这个官方InstallNewRelictoMonitoryourApp的文档。 1.创建NewRelic账号创建一个Ne......