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

mb2*_*b21 5 authentication rest http-status-codes

在构建不使用HTTP基本身份验证的REST API (但是其他类似api-key)并且客户端提供无效凭据时,您应该返回什么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,因此它知道要发送什么类型的凭据以及采用何种格式.[...]

小智 9

您假设www-authenticate值必须是基本的.您可以返回不同的值,例如"API-key"作为需要发生的auth类型.因此,随意返回401和www-authenticate标头以及其他一些值.您甚至可以使用不同的值返回多个标头,指示您的应用支持的不同类型的身份验证.

  • 什么规范描述了“www-authenticate”的有效值?是否有列表或一些事实上的标准化值? (2认同)
  • 这里有一个(非常新的)列表:http://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml。 (2认同)