2

我正在编写一个需要用户登录的 Web 应用程序。正如您可能认识到的那样,有许多工作流程可以响应无效的用户凭据。大多数浏览器都能够在其凭证存储中存储(接受)用户凭证。

我最初的问题分为两部分:

  1. 如果站点需要登录用户,应该向用户发送哪个 HTTP 状态代码?我不是指用户自己请求登录页面的情况。
  2. 如果他/她输入了无效的凭据,应该向用户发送哪个 HTTP 状态代码?

我猜 HTTP 401 仅适用于通过浏览器提示进行的“旧式”身份验证。我正在使用自己的登录页面来摆脱那些浏览器提示。

4

2 回答 2

2

认证有很多标准。您可以在此处找到几个示例: http : //docs.oracle.com/javaee/1.4/tutorial/doc/Security5.html 您描述的错误代码 401 用于基本身份验证。它不旧:)。

当您使用自己的登录表单时,请遵循标准表单身份验证流程:

  1. 如果用户在没有身份验证的情况下访问受保护的资源,则重定向到登录页面(HTTP 代码 302)
  2. 显示登录页面(HTTP 代码 200)。提交用户名到专用 URL(一般是 j_security_check)
  3. 身份验证成功后重定向回原始受保护资源(HTTP 代码 302)
  4. 身份验证失败后,再次显示登录页面并显示错误代码(HTTP 代码 200)
  5. 如果用户在身份验证后访问受保护的资源,则显示该资源(HTTP 代码 200)

要区分经过身份验证的会话和未经过身份验证的会话,您可以使用 HTTP cookie。建议使用 GUID 而不是任何用户信息(例如用户名)。

于 2013-04-13T13:04:49.840 回答
0

401 Unauthorized / 407 Proxy Authentication Required 是唯一相关的状态代码。

仅当您拒绝访问任何资源时才应显示 401 Unauthorized - 如果您正在重定向或向其显示登录页面,则不应显示。

407 就像 401 一样,除了您希望 auth 由外部服务处理并且您希望提供 Proxy-Authenticate 标头字段。

更典型的是,您向用户显示 200 OK 和登录页面。

于 2013-04-13T12:20:04.170 回答