看着the docs http://www.django-rest-framework.org/api-guide/authentication#sessionauthentication and 来源 https://github.com/tomchristie/django-rest-framework/blob/29bcce70135d9fccd8d27a5e425f756363e28700/rest_framework/authentication.py#L101Django REST 框架,我看到SessionAuthentication
只返回 HTTP 403 代码,而其他Authentication
类会返回401。这是什么原因呢?
确实有很多这样的情况第401章 有道理 https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses.
这个问题尤其成问题,因为“在确定响应类型时使用视图上设置的第一个身份验证类”。和SessionAuthentication
默认是第一个Authentication
class.
Django REST 框架遵循HTTP规范 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2,并且当Authentication
类不返回WWW-Authenticate
可以使用的标头。
HTTP 401 响应必须始终包含WWW-Authenticate
标头,指示客户端如何进行身份验证。 HTTP 403 响应不包括WWW-Authenticate
header.
-- Django REST 框架文档 http://www.django-rest-framework.org/api-guide/authentication#unauthorized-and-forbidden-responses
因为SessionAuthentication
类没有定义WWW-Authenticate
可以使用的标头,Django REST Framework 无法返回 401 响应,但仍然遵循规范。您可以通过设置另一个来解决这个问题Authentication
支持将标题置于列表顶部的类,例如BasicAuthentication http://www.django-rest-framework.org/api-guide/authentication#basicauthentication.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)