【发布时间】: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,这样它就知道要发送什么样的凭据 以及采用什么格式。 [...]
【问题讨论】:
-
出于各种原因,您应该避免在标头中使用 API 密钥。在这里查看我的讨论:soabits.blogspot.dk/2014/02/… 和 Eran Hammers 的讨论:hueniverse.com/2010/09/29/…
-
刚刚发现什么基本相同的问题。它没有出现在我之前的搜索中:stackoverflow.com/questions/17687876/…
标签: rest authentication http-status-codes