建议的Web身份验证工作流程(HTTP状态代码)是什么?

时间:2013-04-13 12:11:05

标签: http authentication web-applications http-status-codes

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

我原来的问题分为两部分:

  1. 如果网站需要登录用户,应向用户发送哪个HTTP状态代码?我并不是指用户自己请求登录页面的情况。
  2. 如果用户输入的凭据无效,应将哪个HTTP状态代码发送给用户?
  3. HTTP 401仅用于通过浏览器提示进行“旧式”验证。我正在使用自己的登录页面来摆脱那些浏览器提示。

2 个答案:

答案 0 :(得分: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. 的登录页面
  6. 如果用户在身份验证后显示资源(HTTP代码200)
  7. ,则访问受保护资源

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

答案 1 :(得分:0)

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

401只有在您拒绝访问任何资源时才会出现未授权 - 如果您正在重定向或向其显示登录页面,则不会出现。

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

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