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

2024-02-26

看着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(使用前将#替换为@)

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

随机推荐