为什么Django Rest Framework SessionAuthentication对于未经身份验证的用户不需要csrf?

时间:2017-10-15 12:28:58

标签: python django rest session django-rest-framework

我在Django Rest Framework文档中找到了这个:

  

REST框架中的CSRF验证与标准Django的工作方式略有不同,因为需要支持对同一视图的会话和非会话身份验证。这意味着只有经过身份验证的请求才需要CSRF令牌,并且可以在没有CSRF令牌的情况下发送匿名请求

默认情况下,DRF使用以下身份验证类:

'DEFAULT_AUTHENTICATION_CLASSES'= (
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication'
),

在为未经身份验证的用户检查csrf令牌时,使用SessionAuthentication类支持会话和非会话身份验证会出现什么问题?

1 个答案:

答案 0 :(得分:0)

CSRF令牌用于阻止cross site request forgery。这样,您可以确保只有那些客户端可以将POST数据提交到您的服务器前面提供的Web服务器。

在基于django的项目中,登录页面由此django呈现,因此django在此页面中包含有效的CSRF令牌。当登录表单提交时,可以验证哪些。

如果是REST API,API不得在前面呈现任何表单。这就是为什么它不依赖于有效的CSRF令牌。如果您使用django会话在您的API上验证您的用户 - 提供API的django会呈现表单 - 在这种情况下,您具有与上述相同的情况。

相关问题