对于第三方身份验证失败,我应该使用什么 HTTP 代码?

dwj*_*ton 8 http-status-codes

我正在创建一个与第三方应用程序集成的应用程序。

为此,登录用户提交用于第三方集成的 API 密钥。

如果他们提交的 API 密钥无效 - (并从第三方返回 401),我应该返回哪个 HTTP 响应?

从我的应用程序返回 401 听起来令人困惑,因为从前端的角度来看,不清楚它们是否未经我的应用程序或第三方应用程序验证。

我很想给它一个 400 - 就好像他们提交了一个带有无效电子邮件地址的表单等。

use*_*170 8

如果我必须选择一个代码,我可能会选择返回 403 Forbidden。

RFC 7231 §6.5.3对 403 代码的描述如下:

403(禁止)状态码表示服务器理解请求但拒绝授权。希望公开请求被禁止的原因的服务器可以在响应负载(如果有)中描述该原因。

如果请求中提供了身份验证凭据,则服务器认为它们不足以授予访问权限。客户端不应使用相同的凭据自动重复请求。客户端可以使用新的或不同的凭据重复请求。但是,由于与凭据无关的原因,可能会禁止请求。

希望“隐藏”当前存在的被禁止目标资源的源服务器可能会以 404(未找到)状态代码响应。

此状态代码通常用作通用的“身份验证失败”响应,并且不太可能触发任何特定的身份验证机制,例如 401 可以强制浏览器显示用户名/密码提示。身份验证失败的具体原因可以在响应正文中描述,可以是机器可读的形式(例如 JSON 或 XML),也可以是人类可读的文档(例如 HTML)。

Code 400 在这里并不是最糟糕的选择,但它相当通用。