定制 Web 应用程序登录

可以创建表单登录页面和错误页面以便对用户进行认证。

开始之前

Web 客户机或浏览器可以使用下列一种机制来向 Web 服务器认证用户:
  • HTTP 基本认证:Web 服务器要求 Web 客户机进行认证,并且 Web 客户机在 HTTP 头中传递用户标识和密码。
  • HTTPS 客户机认证:此机制要求用户(Web 客户机)拥有公用密钥证书。Web 客户机将证书发送到请求客户机证书的 Web 服务器。此认证机制很强大,它使用超文本传输协议和安全套接字层 (HTTPS) 协议。
  • 基于表单的认证:开发者使用此认证机制控制登录屏幕的外观。

超文本传输协议 (HTTP) 基本认证以简单基本 64 位编码从 Web 客户机将用户密码发送到 Web 服务器。基于表单的认证以明文将用户密码从浏览器发送到 Web 服务器。因此,除非使用 HTTPS 协议,否则 HTTP 基本认证和基于表单的认证都不是很安全。

Web 应用程序部署描述符包含有关使用哪个认证机制的信息。当使用基于表单的认证时,部署描述符还包含用于登录页面和错误页面的条目。登录页面可以是 HTML 页面或 JavaServer Pages (JSP) 文件。从应用程序访问受保护的资源(Servlet、JSP 文件、HTML 页面)时,此登录页面在 Web 客户机端上显示。认证失败时,将显示错误页面。可以写登录页面和错误页面,来满足应用程序的需要和控制这些页面的外观。应用程序组装期间,组装器可为应用程序设置认证机制,并在部署描述符中设置登录页面和错误页面。

表单登录使用 servlet sendRedirect 方法,该方法有用户的多个推论。在表单登录期间使用 sendRedirect 方法两次:
  • sendRedirect 方法最初在 Web 浏览器中显示表单登录。它后来重定向 Web 浏览器回到初始请求的受保护的页面。sendRedirect(String URL) 方法告知 Web 浏览器使用 HTTP GET 请求来获取在 Web 地址中指定的页面。如果 HTTP POST 是对受保护的 servlet 或 JavaServer Pages (JSP) 文件的第一个请求,且先前未发生认证或登录,那么不传递 HTTP POST 到请求的页面。但会传递 HTTP GET,这是因为表单登录使用 sendRedirect 方法,它起 HTTP GET 请求的作用,试图在发生登录后显示请求的页面。
  • 使用 HTTP POST,您可能经历过未保护的 HTML 表单从用户收集数据然后将此数据发布给受保护的 servlet 或 JSP 文件进行处理,但用户没有登录该资源的情况。要避免这样的情况,结构化您的 Web 应用程序或许可权,以便在应用程序对受保护的 servlet 或 JSP 文件执行任何 HTTP POST 操作前,强制用户使用表单登录页面。
注: 确保表单登录页面中包含的任何文件(例如,外部样式表或图像)都不受保护。

过程

  1. 创建带有必需外观(包含必需元素)的表单登录页面,以执行基于表单的认证。
  2. 创建错误页面。可编写错误页面来重试认证或显示相应的错误消息。
  3. 将登录页面和错误页面放置到相对于顶级目录的 Web 应用程序归档 (.war) 文件中。例如,如果在部署描述符中,登录页面配置成 /login.html,将它放入 WAR 文件的顶部目录。组装程序还使用组装工具执行此步骤。
  4. 仅当 Web 应用程序需要基于表单的认证机制时,创建表单注销页面并将它插入应用程序。

    缺省情况下,注销页面的 URL 应该指向请求所发往的主机或其域。否则,将显示通用注销页面。如果需要此 URL 指向不同的主机,那么您需要在 security.xml 文件中,为 com.ibm.websphere.security.logoutExitPageDomainList 属性设置允许注销页面使用的 URL 列表。可通过将 com.ibm.websphere.security.allowAnyLogoutExitPageHost 属性设置为值 true,来选择任何可允许使用的注销退出页面。将此属性设置为 true 可能使您的系统遭受潜在 URL 重定向攻击。

示例:表单登录

可使用 WebSphere® Application Server 登录设施来实现和配置表单登录过程。对 WebSphere Application Server 和 Java™ Platform, Enterprise Edition (Java EE) 登录功能使用以下技术:
  • Java EE 基于表单的登录
  • 用于登录的 Java EE servlet 过滤器
  • IBM® 扩展:基于表单的登录
表单登录样本是 Technology Samples 包的一部分。有关如何访问表单登录样本的更多信息,请参阅“访问样本”。
表单登录用法
要使认证继续正确进行,登录表单的操作必须始终有 j_security_check 操作。以下示例显示了如何将表单编码到 HTML 页面中:
<form method="POST" action="j_security_check">
<input type="text" name="j_username">
<input type="text" name="j_password" autocomplete="off">  
<\form>

使用 j_username 输入字段获取用户名,而使用 j_password 输入字段获取用户密码。

接收 Web 客户机的请求时,Web 服务器将已配置的表单页面发送到客户机并保存原始请求。当 Web 服务器从 Web 客户机接收已完成的表单页面时,它将从表单中抽取用户名和密码并对用户进行认证。成功认证时,Web 服务器重定向调用到原始请求。如果认证失败,那么 Web 服务器重定向调用到已配置错误页面。

以下示例说明了 HTML 文件中的登录页面 (login.html):
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
<title> Security FVT Login Page </title>
<body>
<h2>Form Login</h2>
<FORM METHOD=POST ACTION="j_security_check">
<p>
<font size="2"> <strong> Enter user ID and password: </strong></font>
<BR>
<strong> User ID</strong> <input type="text" size="20" name="j_username">
<strong> Password </strong>  <input type="password" size="20" name="j_password" autocomplete="off">
<BR>
<BR>
<font size="2">  <strong> And then click this button: </strong></font>
<input type="submit" name="login" value="Login">
</p>

</form>
</body>
</html>
以下示例说明了 JSP 文件中的错误页面:
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<head><title>A Form login authentication failure occurred</head></title>
<body>
<H1><B>A Form login authentication failure occurred</H1></B>
<P>Authentication may fail for one of many reasons. Some possibilities include:
<OL>
<LI>The user-id or password may be entered incorrectly; either misspelled or the 
wrong case was used.
<LI>The user-id or password does not exist, has expired, or has been disabled.
</OL>
</P>
</body>
</html>
组装器配置 Web 应用程序以使用基于表单的认证后,部署描述符包含登录配置,如同所显示的那样:
<login-config id="LoginConfig_1">
<auth-method>FORM<auth-method>
<realm-name>Example Form-Based Authentication Area</realm-name>
<form-login-config id="FormLoginConfig_1">
<form-login-page>/login.html</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
如下是样本 Web 应用程序归档 (WAR) 文件目录结构,它显示了先前登录配置的登录页面和错误页面:
META-INF
     META-INF/MANIFEST.MF
     login.html
     error.jsp
     WEB-INF/
     WEB-INF/classes/
     WEB-INF/classes/aServlet.class
表单注销

表单注销是一种注销机制,无须关闭所有 Web 浏览器会话。退出表单注销机制后,对受保护的 Web 资源进行访问将需要重新认证。J2EE 规范不需要此功能,但该功能是作为 WebSphere Application Server 安全性中的附加功能提供的。

假设您希望在登录 Web 应用程序后注销并执行某些操作。表单注销以下列方式工作:
  1. 注销表单 URI 是在 Web 浏览器中指定的,并且会装入该表单。
  2. 用户在表单上单击提交以注销。
  3. WebSphere Application Server 安全性代码注销用户。在此过程中,应用程序服务器会完成以下过程:
    1. 清除轻量级第三方认证 (LTPA)/单点登录 (SSO) cookie
    2. 使 HTTP 会话失效
    3. 从认证高速缓存中移除用户
  4. 注销后,用户被重定向到注销退出页面。

表单注销不需要部署描述符中的任何属性。表单注销页面是随 Web 应用程序提供的 HTML 或 JavaServer Pages (JSP) 文件。表单注销页面同大多数 HTML 表单(表单登录页面除外)一样,它具有一个特殊公布操作。此公布操作由 Web 容器识别,它将公布操作分派给一个特殊的内部表单注销 servlet。表单注销页面中的公布操作必须是 ibm_security_logout

可在注销表单中指定注销退出页面,而退出页面可以表示注销后用户重定向到的同一 Web 应用程序中的 HTML 或 JSP 文件。此外,注销退出页面允许 http://hostname:port/URL 格式的标准 URL。注销退出页面是作为表单注销页面中的参数指定的。如果未指定注销退出页面,那么将返回缺省注销 HTML 消息给用户。

这是表单注销 HTML 表单样本。此表单配置注销退出页面,以在注销后将用户重定向到登录页面。
<!DOCTYPE HTML PUBliC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
		<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
		<title>Logout Page </title>
		<body>
		<h2>Sample Form Logout</h2>
						<FORM METHOD=POST ACTION="ibm_security_logout" NAME="logout">
						<p>
						<BR>
						<BR>
						<font size="2"><strong> Click this button to log out: </strong></font>
						<input type="submit" name="logout" value="Logout">
						<INPUT TYPE="HIDDEN" name="logoutExitPage" VALUE="/login.html">
						</p>
						</form>
		</body>
</html>

下一步做什么

开发登录页面和错误页面之后,将它们添加到 Web 应用程序。使用组装工具配置认证机制,并在应用程序的部署描述符中插入已开发的登录页面和错误页面。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_pofolo
文件名:tsec_pofolo.html