【问题标题】:HTTP 401 Unauthorized when not using HTTP basic auth?不使用 HTTP 基本身份验证时 HTTP 401 未经授权?
【发布时间】:2014-08-24 13:45:26
【问题描述】:

在构建不使用HTTP basic authentication(但其他类似 api-key)的 REST API 并且客户端提供无效凭据时,您应该返回什么 HTTP 状态代码? 401 Unauthorized 还是 403 Forbidden?

IANA HTTP Status Code Registry 列出 RFC7235, Section 3.1 负责“401 Unauthorized”,其中指出:

生成 401 响应的服务器必须发送 WWW-Authenticate 头字段

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

Django seems 同意:

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

将使用的响应类型取决于身份验证方案。

而 Richardson seems 不同意:

401(“未经授权”)
重要性:高。
客户端尝试在未提供正确身份验证凭据的情况下对受保护资源进行操作。它可能提供了错误的凭据,或者根本没有提供。 凭证可以是用户名和密码、API 密钥或身份验证 令牌——无论有问题的服务期望什么。客户制作是很常见的 请求 URI 并接受 401,这样它就知道要发送什么样的凭据 以及采用什么格式。 [...]

【问题讨论】:

标签: rest authentication http-status-codes


【解决方案1】:

您假设 www-authenticate 值需要是基本的。您可以返回不同的值,如“API-key”作为需要发生的身份验证类型。因此,请随时返回 401 和带有其他值的 www-authenticate 标头。您甚至可以返回多个具有不同值的标头,指示您的应用支持的不同类型的身份验证。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多