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

问题描述 投票:29回答:2

类似的问题发布在这里:What's an appropriate HTTP status code to return by a REST API service for a validation failure?

上面的线程中的答案指出“例如,如果URI应该具有ISO-8601日期,并且您发现它的格式错误或者指的是2月31日,那么您将返回HTTP 400.如果您期望的话,同样如此实体主体中格式良好的XML,无法解析。“

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

401将是不正确的(如此建议:Which HTTP status code to say username or password were incorrect?)因为用户没有尝试访问任何页面,他只是尝试登录并输入不匹配的数据。

如果你回顾我链接的第一篇文章,第二个答案表明422是正确的响应(看起来对我来说是正确的),但是,我使用的是Django Rest Framework而422并不是状态代码的一部分(a可以在此处找到属于DRF的状态代码列表:http://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx

404也看起来不正确,因为数据被成功接受而不被拒绝。

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

validation rest django-rest-framework restful-authentication http-status-codes
2个回答
50
投票

正确的HTTP代码实际上是401.来自the RFC

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

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


© www.soinside.com 2019 - 2024. All rights reserved.