当前位置: 首页 > 知识库问答 >
问题:

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

康赞
2023-03-14

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

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

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

如果你回头看我链接的第一篇文章,第二个答案说明422是正确的响应(在我看来也是正确的),然而,我使用的是Django Rest框架,422不是状态代码的一部分(作为DRF一部分的状态代码列表可以在这里找到:http://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx)

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

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

共有1个答案

夏锐藻
2023-03-14

如果严格使用RFC7235为REST API提供的HTTP身份验证框架,那么正确的HTTP代码实际上应该是401。来自RFC:

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

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

更高级别的响应,例如为可视用户呈现的登录页面(通过302从受保护的资源重定向),最好使用200状态码(例如per@kerneldeimos的答案)。由于登录页通常是它们自己的资源(例如/login?redirect=original-resource),未经身份验证的用户仍然有权查看此页,即使它们提供了错误的用户名/密码。然后,将经过身份验证的用户重定向回资源,如果允许,则显示200,如果禁止用户查看资源,则显示403。

401可以使用可视化登录页面的领域是一个html" target="_blank">前端库,它使用XHR请求来利用REST API,然后将来自REST API的401响应中继回登录页面上有意义的格式。

 类似资料:
  • 问题内容: 这里发布了一个类似的问题:REST API服务针对验证失败返回什么合适的HTTP状态代码? 上面线程中的答案指出:“例如,如果URI应该具有ISO-8601日期,而您发现它的格式错误或引用的日期是2月31日,则您将返回HTTP 400。实体主体中格式正确的XML,并且无法解析。” 但是,如果用户提交了正确格式的数据会怎样?我的意思是,用户为用户名和密码提交了纯字母字符串/文本(这对我的

  • 我想知道我是否以正确的方式编写了泽西客户端代码。 登录页面应该在输入正确的用户名和密码后重定向到主页,服务器端返回一个空字符串()。如果其中一个不正确,服务器端代码返回。 页面功能运行良好,但当我使用正确的用户名和密码对使用客户端代码进行测试时,它返回,响应返回200OK。下面是我的客户端代码。 我怀疑用户名和密码没有按HTML文件要求的正确输入位置提交。下面是我的HTML文件块。

  • 在cognito用户池中,我有两个不同的组:Admin 现在我想授权userpool中的用户。我正在关注这个链接-https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html -客户端身份验证流。但是“RespondToAuthChalleng

  • 我有一个PHP网页,其中我配置了aws sdk并实例化了cognito客户机。客户机也配置了一个客户机密码,并且启用了auth flows USER\u PASSWORD\u auth、USER\u SRP\u auth。具有基本身份验证流类型USER\u PASSWORD\u auth的initiateAuth对我来说很好。下面是我尝试过的示例用法- 通过这种方式,我们获得了一个带有access

  • 早上好,我在登录使用Spring Security的应用程序时遇到了问题。每次我尝试登录时(即使用户名和密码正确),应用程序都会将我重定向到失败url(在我的情况下是:/login?error=true)。密码是用BCrypt加密的,我使用MySQL数据库来存储它们。 应用程序基于Spring in Action 5:https://github.com/habuma/spring-in-acti

  • 我正在尝试获取关于用户使用哪个浏览器调用API的信息。我在网上搜索,似乎应该使用来自请求头的“用户-代理”。 这里会有什么问题?为什么头球会出错? 提前谢谢!