身份验证
身份验证是将传入请求与一组识别凭证(例如请求的用户或其签名的令牌)相关联的机制。然后,权限和限制策略可以使用这些凭据来确定请求是否应该被允许。
REST framework 提供了许多开箱即用的身份验证方案,同时也允许你实施自定义方案。
身份验证始终在视图的开始处运行,在执行权限和限制检查之前,在允许继续执行任何其他代码之前。
request.user 属性通常会设置为 contrib.auth 包的 User 类的一个实例。
request.auth 属性用于其他身份验证信息,例如,它可以用来表示请求已签名的身份验证令牌。
如何确定身份验证
认证方案总是被定义为一个类的列表。 REST framework 将尝试使用列表中的每个类进行认证,并将使用成功认证的第一个类的返回值来设置 request.user 和 request.auth 。
如果没有类进行身份验证,则将 request.user 设置为 django.contrib.auth.models.AnonymousUser 的实例,并将 request.auth 设置为 None.
可以使用 UNAUTHENTICATED_USER 和 UNAUTHENTICATED_TOKEN 设置修改未经身份验证的请求的 request.user 和 request.auth 的值。
设置认证方案
默认的认证方案可以使用 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篇