ToB企服应用市场:ToB评测及商务社交产业平台

标题: Django REST framework安全实践:轻松实现认证、权限与限流功能 [打印本页]

作者: 魏晓东    时间: 2024-7-10 20:21
标题: Django REST framework安全实践:轻松实现认证、权限与限流功能

系列文章目录

   
  

  

媒介

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

一、认证

   Django 自带一个用户验证体系。它负责处置惩罚用户账号、组、权限和基于cookie的用户会话。
Django 验证体系处置惩罚验证和授权。简朴来说,验证检验用户是否是他们的用户,授权决定已验证用户能做什么。
    认证体系由以下部分组成:
  
    Django 里的验证体系旨在通用化,不提供一些常见的 web 验证体系的特性。其中一些常见问题的办理方案已在第三方包中实现。
  
    可以在配置文件中配置全局默认的认证方案,认证需要和权限一起使用
  1. #settings.py
  2. REST_FRAMEWORK = {
  3. 'DEFAULT_AUTHENTICATION_CLASSES':(
  4.         #基本认证
  5.        'rest_framework.authentication.BasicAuthentication',
  6.                 # session认证
  7.        'rest_framework.authentication.SessionAuthentication',
  8.     ),
  9. )
复制代码
  认证失败会有两种可能的返回值:
  
  二、权限

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

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

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

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

   视图中使用throttle_classes属性设置限流用户类型
  1.   from rest_framework.generics import ListAPIView
  2.   from serializer import UserSerializer, User
  3.   
  4.   from rest_framework.throttling import AnonRateThrottle
  5.   class UserView(ListAPIView):
  6.       queryset = User.objects.all()
  7.       serializer_class = UserSerializer
  8.       throttle_classes = [AnonRateThrottle]  
  9.       # 指明针对匿名用户进行限流,限流频率全局配置
复制代码
  在项目配置文件中针对用户类型设置具体频率:
  1.   REST_FRAMEWORK = {
  2.       'DEFAULT_THROTTLE_RATES': {
  3.           # 可以使用 second, minute, hour 或day来指明周期
  4.           'anon': '3/minute',
  5.           'user': '5/minute'
  6.       }
  7.   }
复制代码
四、认证、权限、限流全局配置示例

  1. # settings.py
  2. # 认证,权限,限流
  3. REST_FRAMEWORK = {
  4.     'DEFAULT_AUTHENTICATION_CLASSES':(
  5.         #基本认证
  6.         'rest_framework.authentication.BasicAuthentication',
  7.         # session认证
  8.         'rest_framework.authentication.SessionAuthentication',
  9.     ),
  10.     'DEFAULT_PERMISSION_CLASSES': (
  11.         'rest_framework.permissions.IsAuthenticated',
  12.     ),
  13.     'DEFAULT_THROTTLE_CLASSES': (
  14.           # 限制所有匿名未认证用户,使用IP区分用户
  15.           'rest_framework.throttling.AnonRateThrottle',
  16.           #认证用户的限流
  17.           'rest_framework.throttling.UserRateThrottle',
  18.     ),
  19.     'DEFAULT_THROTTLE_RATES': {
  20.           # 可以使用 second, minute, hour 或day来指明周期
  21.           'anon': '3/minute',
  22.           'user': '5/minute'
  23.     }
  24. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4