2017-10-15 82 views
0

我發現這個在Django的REST框架文檔:爲什麼Django Rest Framework SessionAuthentication不需要未經身份驗證的用戶使用csrf?

在REST框架CSRF驗證不同的工作方式略有標準的Django由於需要同時支持會話和非基於會話的認證,以相同的看法。這意味着,只有通過身份驗證請求需要CSRF令牌,並且可以在不CSRF發送匿名請求令牌

默認情況下DRF使用這些認證類:

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

,會是什麼問題,同時支持會話,基於非會話的身份驗證,同時檢查未經身份驗證的用戶的csrf令牌(使用SessionAuthentication類)?

回答

0

CSRF令牌用於防止cross site request forgery。通過這種方式,您可以確保只有這些客戶端可以向您的Web服務器提交POST數據,這些數據由您的服務器在前面呈現。

在基於django的項目中,登錄頁面由此django呈現,因此django在此頁面中包含有效的CSRF標記。當提交登錄表單時,可以驗證哪些內容。

在REST API的情況下,API不能在前面呈現任何表單。這就是爲什麼它不依賴有效的CSRF令牌。如果您使用django會話在您的API處對用戶進行身份驗證 - 提供API的django將呈現表單 - 在這種情況下,您的情況與上述情況相同。

相關問題