身份验证是将传入请求与一组识别凭证(例如请求的用户或其签名的令牌)相关联的机制。而后,权限和限制策略能够使用这些凭据来肯定请求是否应该被容许。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,)
该认证方案使用 HTTP Basic Authentication,并根据用户的用户名和密码进行签名。Basic Authentication 一般只适用于测试。
若是成功经过身份验证,BasicAuthentication 将提供如下凭据。
request.user 是一个 Django User 实力.
request.auth 是 None.
未经身份验证的响应被拒绝将致使 HTTP 401 Unauthorized 的响应和相应的 WWW-Authenticate header。
此认证方案使用 Django 的默认 session 后端进行认证。Session 身份验证适用于与您的网站在同一会话环境中运行的 AJAX 客户端。
若是成功经过身份验证,则 SessionAuthentication 会提供如下凭据。
request.user 是一个 Django User 实例.
request.auth 是 None.
未经身份验证的响应被拒绝将致使 HTTP 403 Forbidden 响应。
若是您在 SessionAuthentication 中使用 AJAX 风格的 API,则须要确保为任何 “不安全” 的 HTTP 方法调用(例如 PUT,PATCH,POST 或 DELETE 请求)包含有效的 CSRF 令牌。
详见jwt篇