当前位置:   article > 正文

Django REST framework中认证和权限的使用方法_django restful 鉴权

django restful 鉴权

Django REST framework中认证和权限的使用方法

认证方式:

  • 基本认证
  • 会话认证(SessionAuthentication)
  • 令牌认证(TokenAuthentication)

基本认证:
此身份验证方案使用HTTP基本身份验证,该身份针对用户的用户名和密码进行了签名。基本身份验证通常仅适用于测试。
如果成功通过身份验证request.user将是DjangoUser实例。
未经授权的身份验证的响应将被拒绝 HTTP 401 Unauthorized

会话认证(SessionAuthentication):
此身份验证方案使用Django的默认会话后端进行身份验证。会话身份验证适用于在与您的网站相同的会话上下文中运行的AJAX客户端。

如果成功通过身份验证request.user将是DjangoUser实例。

未经授权的身份验证的响应将被拒绝HTTP 403 Forbidden。

令牌认证(TokenAuthentication)
此身份验证方案使用简单的基于令牌的HTTP身份验证方案。令牌认证适用于客户端-服务器设置,例如本机台式机和移动客户端。

为了使客户端进行身份验证,令牌密钥应包含在AuthorizationHTTP标头中。密钥应以字符串文字“ Token”作为前缀,并用空格分隔两个字符串。例如:

Authorization:Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
  • 1

认证失败会有两种可能的返回值:

401 Unauthorized 未认证
403 Permission Denied 权限被禁止

认证全局设置
可以在配置文件中配置全局默认的认证方案,配这里是应用在全局的

REST_FRAMEWORK = {
    # 默认的认证列表: session
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',  # session认证
    )
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

因为 认证一般都是和权限配合使用,当我们不设置权限时,是没有任何效果的。为了让大家看到最佳效果,我们额外添加一条配置信息。配置信息的意思是 只有认证登录用户才可以访问视图

REST_FRAMEWORK = {
    # 默认的认证列表: session
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
    ],
    # 默认的权限列表: 只有登录用户才可以访问
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

指定视图认证设置
我们也可以在每个视图中通过设置authentication_classess属性来设置

from book.models import BookInfo
from book.serializers import BookInfoModelSerializer
from rest_framework.viewsets import ModelViewSet
from rest_framework.authentication import TokenAuthentication


class BookModelViewSet(ModelViewSet):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoModelSerializer

    #单个视图,设置单独认证方式
    authentication_classes = [TokenAuthentication]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

单个视图进行认证,仅对该视图有效。

权限Permissions

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

  • 在执行视图的dispatch()方法前,会先进行视图访问权限的判断
  • 在通过get_object()获取具体对象时,会进行对象访问权限的判断

1.权限的种类

  • AllowAny 允许所有用户
  • IsAuthenticated 仅通过认证的用户
  • IsAdminUser 仅管理员用户
  • IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取

2.使用
可以在配置文件中设置默认的权限管理类,如

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',# 仅通过认证的用户
    )
}
  • 1
  • 2
  • 3
  • 4
  • 5

如果未指明,则采用如下默认配置:

'DEFAULT_PERMISSION_CLASSES': (
   'rest_framework.permissions.AllowAny',
)
  • 1
  • 2
  • 3

也可以在具体的视图中通过permission_classes属性来设置,如

from book.models import BookInfo
from book.serializers import BookInfoModelSerializer
from rest_framework.viewsets import ModelViewSet
from rest_framework.authentication import SessionAuthentication

class BookModelViewSet(ModelViewSet):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoModelSerializer

    #单个视图,设置单独认证方式
    authentication_classes = [SessionAuthentication]
    permission_classes = [AllowAny]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.指定视图设置(仅在该视图生效)

from book.models import BookInfo
from book.serializers import BookInfoModelSerializer
from rest_framework.viewsets import ModelViewSet
from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import AllowAny

class BookModelViewSet(ModelViewSet):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoModelSerializer

    #单个视图,设置单独认证方式
    authentication_classes = [SessionAuthentication]
    #设置单独的权限
    permission_classes = [AllowAny]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/71621
推荐阅读
相关标签
  

闽ICP备14008679号