验证-如果用户尝试使用不正确的用户名/密码但格式正确的登录,返回什么合适的HTTP状态代码?

这里发布了一个类似的问题:REST API服务针对验证失败返回什么合适的HTTP状态代码?

上面线程中的答案指出:“例如,如果URI应该具有ISO-8601日期,而您发现它的格式错误或指向2月31日,那么您将返回HTTP 400。 实体主体中格式正确的XML,并且无法解析。”

但是,如果用户提交了正确格式的数据会怎样? 我的意思是,用户为用户名和密码提交了纯字母字符串/文本(这对我的应用程序完全有效)。 唯一的问题是密码与用户名不匹配。 在这种情况下,400是不正确的,因为它是完全有效的语法并且格式正确。

401不正确(如此处的建议:哪个HTTP状态代码表示用户名或密码不正确?),因为用户没有尝试访问任何页面,他只是在尝试登录和输入不匹配的数据。

如果您回顾一下我链接到的第一篇文章,则第二个回答指出422是正确的响应(并且对我来说看起来是正确的),但是,我使用的是Django Rest Framework,而422不是状态代码的一部分( 可以在以下位置找到DRF的一部分状态代码:[http://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx)]

404的外观也不正确,因为数据已成功接受且未被拒绝。

话虽如此,应该使用的真正正确答案是什么?

3个解决方案
59 votes

正确的HTTP代码实际上是401。从RFC:

401(未经授权)状态码表示该请求尚未应用,因为它缺少目标资源的有效身份验证凭据。 产生401响应的服务器必须发送WWW-Authenticate头域(4.1节),该域包含至少一个适用于目标资源的质询。

如果请求包括身份验证凭据,则401响应指示已拒绝这些凭据的授权。 用户代理可以用一个新的或替换的Authorization标头字段(第4.2节)重复该请求。

sjagr answered 2020-08-05T01:22:32Z
2 votes

401-未经授权

403-禁止

[HTTP://呜呜呜.不过关于bread.com/2012/11/HTTP-error-codes-401-access-denied-403.HTML]

Tony Arnold answered 2020-08-05T01:23:00Z
0 votes

我认为最好将响应状态代码设置为200。以防止单词表攻击。 在巨大的网络犯罪分子中,无法确定哪个请求和响应是正确的)))

Levon answered 2020-08-05T01:23:20Z
translate from https://stackoverflow.com:/questions/32752578/whats-the-appropriate-http-status-code-to-return-if-a-user-tries-logging-in-wit