为什么Django REST Framework中的SessionAuthentication永远不会返回HTTP401

时间:2014-10-28 04:36:23

标签: django django-rest-framework

查看Django REST框架的the docsthe source,我发现SessionAuthentication只返回HTTP 403代码,而其他Authentication类将返回401。这是什么原因?

肯定有很多情况401 makes sense

这个问题特别成问题,因为"在确定响应类型时使用视图上设置的第一个认证类。"并且SessionAuthentication默认为第一个Authentication类。

1 个答案:

答案 0 :(得分:8)

Django REST Framework遵循HTTP specification,并且当Authentication类没有返回可以使用的WWW-Authenticate标头时,不会返回401响应。

  

HTTP 401响应必须始终包含WWW-Authenticate标头,指示客户端如何进行身份验证。 HTTP 403响应不包括WWW-Authenticate标头。

     

- Django REST Framework documentation

因为SessionAuthentication类没有定义可以使用的WWW-Authenticate标头,所以Django REST Framework不能返回401响应,仍然遵循规范。您可以通过将支持标题的其他Authentication类设置到列表顶部来解决此问题,例如BasicAuthentication