1.概念

身份验证是将传入请求与一组标识凭据(例如,请求来自的用户或与其进行签名的令牌)相关联的机制。然后,权限和限制策略可以使用这些凭据来确定是否应允许该请求。

身份验证本身不会允许或不允许传入的请求,它只会标识发出请求的凭据。

认证管理一般和权限管理配合使用。
文档:https://www.django-rest-framework.org/api-guide/authentication/

2.认证方式

1.基本认证(BasicAuthentication)

此身份验证方案使用HTTP基本身份验证,该身份针对用户的用户名和密码进行了签名。基本身份验证通常仅适用于测试。

Django DRF - 认证Authentication_django


如果成功通过身份验证request.user将是DjangoUser实例。未经授权的身份验证的响应将被拒绝 HTTP 401 Unauthorized

Django DRF - 认证Authentication_django_02

2. 会话认证(SessionAuthentication)

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

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

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

3. 令牌认证(TokenAuthentication)

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

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

Authorization:Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

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

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

3. 认证全局设置

可以在配置文件中配置全局默认的认证方案

REST_FRAMEWORK = {
    # 默认的认证列表: session
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',  # session认证
    )
}

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

REST_FRAMEWORK = {
    # 默认的认证列表: session
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
    ],
    # 默认的权限列表: 只有登录用户才可以访问
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}

添加了权限配置之后,会出现如下响应

Django DRF - 认证Authentication_身份验证_03

4.认证指定视图设置

也可以在每个视图中通过设置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]

设置

Django DRF - 认证Authentication_python_04


以上就是Django DRF - Authentication权限认证的相关介绍,希望对你有所帮助。