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

时间:2014-07-03 12:24:42

标签: rest authentication http-status-codes

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

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只是为了知道要发送什么类型的凭据   以什么格式。 [...]

1 个答案:

答案 0 :(得分:9)

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