django rest framework authentication

身份验证


身份验证是将传入请求与一组识别凭证(例如请求的用户或其签名的令牌)相关联的机制。而后,权限和限制策略能够使用这些凭据来肯定请求是否应该被容许。html

REST framework 提供了许多开箱即用的身份验证方案,同时也容许你实施自定义方案。web

身份验证始终在视图的开始处运行,在执行权限和限制检查以前,在容许继续执行任何其余代码以前。django

request.user 属性一般会设置为 contrib.auth 包的 User 类的一个实例。json

request.auth 属性用于其余身份验证信息,例如,它能够用来表示请求已签名的身份验证令牌。后端

如何肯定身份验证


认证方案老是被定义为一个类的列表。 REST framework 将尝试使用列表中的每一个类进行认证,并将使用成功认证的第一个类的返回值来设置 request.user 和 request.auth 。api

若是没有类进行身份验证,则将 request.user 设置为 django.contrib.auth.models.AnonymousUser 的实例,并将 request.auth 设置为 None.安全

能够使用 UNAUTHENTICATED_USER 和 UNAUTHENTICATED_TOKEN 设置修改未经身份验证的请求的 request.user 和 request.auth 的值。session

设置认证方案


默认的认证方案能够使用 DEFAULT_AUTHENTICATION_CLASSES setting 全局设置。例如测试

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}

基于 APIView 类的视图上设置身份验证策略网站

authentication_classes = (SessionAuthentication,)

API参考

BasicAuthentication

该认证方案使用 HTTP Basic Authentication,并根据用户的用户名和密码进行签名。Basic Authentication 一般只适用于测试。

若是成功经过身份验证,BasicAuthentication 将提供如下凭据。

request.user 是一个 Django User 实力.

request.auth 是 None.

未经身份验证的响应被拒绝将致使 HTTP 401 Unauthorized 的响应和相应的 WWW-Authenticate header。

SessionAuthentication

此认证方案使用 Django 的默认 session 后端进行认证。Session 身份验证适用于与您的网站在同一会话环境中运行的 AJAX 客户端。

若是成功经过身份验证,则 SessionAuthentication 会提供如下凭据。

request.user 是一个 Django User 实例.
request.auth 是 None.
未经身份验证的响应被拒绝将致使 HTTP 403 Forbidden 响应。

若是您在 SessionAuthentication 中使用 AJAX 风格的 API,则须要确保为任何 “不安全” 的 HTTP 方法调用(例如 PUT,PATCH,POST 或 DELETE 请求)包含有效的 CSRF 令牌。

JSONWebTokenAuthentication

详见jwt篇

相关文章
相关标签/搜索