HTTP 401未使用HTTP基本身份验证时未经授权?

在构建不使用HTTP基本身份验证(但其他类似api-key)的REST API并且客户端提供无效凭据时,您应该返回哪个HTTP状态码? 401未经授权或403禁止?

IANA HTTP状态代码注册管理机构列出RFC7235,第3.1节负责“401未经授权”,其中规定:

生成401响应的服务器务必发送一个WWW-Authenticate头域

这是否意味着REST API应该只在使用HTTP基本认证时才返回401,而不是在例如通过api-key使用认证时返回?

Django似乎同意:

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

将使用哪种响应取决于认证方案。

理查森似乎不同意:

401(“未经授权”)
重要性:高。
客户端尝试在受保护的资源上运行而不提供适当的身份验证凭证。 它可能提供了错误的凭据,或根本没有。 凭据可以是用户名和密码,API密钥或认证令牌 - 不管有问题的服务是否期望。 客户端通常会请求URI并接受401,以便知道要发送什么样的凭证以及以何种格式。 [...]


您假定www-authenticate值需要基本。 您可以返回不同的值,如“API-key”作为需要发生的身份验证类型。 所以请随意返回401和www-authenticate头与其他值。 您甚至可以使用不同的值返回多个标头,以指示应用程序支持的不同类型的身份验证。

链接地址: http://www.djcxy.com/p/71853.html

上一篇: HTTP 401 Unauthorized when not using HTTP basic auth?

下一篇: ASP.NET. Custom Page on 401