查看Django REST框架的the docs和the source,我发现SessionAuthentication
只返回HTTP 403代码,而其他Authentication
类将返回401。这是什么原因?
肯定有很多情况401 makes sense。
这个问题特别成问题,因为"在确定响应类型时使用视图上设置的第一个认证类。"并且SessionAuthentication
默认为第一个Authentication
类。
答案 0 :(得分:8)
Django REST Framework遵循HTTP specification,并且当Authentication
类没有返回可以使用的WWW-Authenticate
标头时,不会返回401响应。
HTTP 401响应必须始终包含
WWW-Authenticate
标头,指示客户端如何进行身份验证。 HTTP 403响应不包括WWW-Authenticate
标头。
因为SessionAuthentication
类没有定义可以使用的WWW-Authenticate
标头,所以Django REST Framework不能返回401响应,仍然遵循规范。您可以通过将支持标题的其他Authentication
类设置到列表顶部来解决此问题,例如BasicAuthentication
。