使用DataPower和HTML基于表单的登录实现轻松的前端身份验证

这个由多期文章组成的新的专栏的第一期文章将会详细探讨此功能,提供 HTML 基于
表单的登录如何部署在 DataPower 中来保护您的 Web 应用程序的实用示例。征服复杂性专栏的每一期文章都会解决一个与安全性相关的常见问题,该问题可使用 IBM
WebSphere DataPower Appliances 和其他 IBM 技术解决或简化。

简介

HTML 基于表单的登录身份验证经常可在互联网上看到。一个网站显示一个 HTML 表单,供浏览器用户提供凭据(比如用户名和密码),然后这些凭据可用于对用户访问某个 Web 应用程序的权利进行身份验证。IBM WebSphere DataPower Appliances 自 3.8.1 版开始在 Web 应用程序防火墙对象中支持 HTML 基于表单的登录。此功能作为一种一般性机制包含在第 5 版固件中的 AAA(身份验证、授权和审计)操作中。

我们看到的最常部署的用例是,将 DataPower HTML 表单登录功能部署在一个运行在 IBM WebSphere Application Server 上的 Java EE 应用程序的前面。这是一个不错的用例;DataPower 可生成一个 LTPA(Lightweight Third Party Authentication,轻量型第三方身份验证)令牌,这是 WebSphere Application Server 可理解的一种 IBM 专用的令牌格式,可将用户身份传播到应用服务器,以便可以使用它来制定授权决策或用于授权用途。但是,保护 WebSphere Application Server 上的应用程序不是 HTML 基于表单的登录的惟一用途。

本文提供一个将 DataPower 放在一个现有的未验证网站的前面的例子。在这个简单的例子中,后端是一组静态 HTML 页面,它们不需要传播身份验证信息;我们只需确保您不首先使用用户名和密码登录,就无法访问网站上的数据。未来的文章将更多地分享(在对用户执行身份验证后)您如何以一种安全方式将该信息传递到后端系统,作为一个端到端应用程序安全解决方案的一部分。DataPower 非常灵活,能够生成许多不同类型的安全令牌,这使得它成为了许多不同类型后端的前端身份验证 Web 代理的不错选择。

本文基于 DataPower 固件版本 6.0.0.3。

实现

DataPower 的 HTML 基于表单的登录实现最初基于 Java EE 规范,任何调查它的人在看到使用的表单参数的默认名称时都会很快会认识到这一点。基于表单的登录配置的大多数工作在 DataPower AAA Extract Identity (EI) 步骤中执行,不熟悉该框架的人可能不太容易理解这一点。这么做是为了为登录表单提供一个单一控制点,这个控制点被称为 HTML 表单登录策略。我们看看这样一个策略的一个简单例子。

HTML 表单登录策略

用于本文的 HTML 表单登录策略如图 1 中所示。

图 1. 一个 HTML 表单登录策略

图 1. 一个 HTML 表单登录策略

我们分析一下这个策略的每一部分。

General Source for Form-processing 配置告诉运行时,在这个实例中,您将使用静态 HTML 文件提供登录、注销和错误页面所需的 HTML 表单。还可以使用 XSL 样式表动态地生成 HTML 表单,这提供了更高的灵活性,使登录表单能够基于运行时参数而调整它的输出;例如,一种代理多个应用程序的配置可使用一个样式表来检查用户尝试访问哪个应用程序,显示一种适当个性化的外观。但是,在此练习中,无需动态生成表单。 接下来是 Redirect URL Type。对于本示例,您将使用 Host 重定向类型;这告诉运行时,在它构建一个重定向到您的一个自定义页面(比如登录页面)的 URL 时,它应该使用 HTML 主机标头的值作为它重定向到的 URL 主干。举例而言,在一些高级用例中,如果这是逆向代理链中的第二个代理,这可能不适合。在这个示例中,您可能希望告诉运行时使用 URL-in service 变量,这是下拉列表中的另一个选项;这将告诉运行时将请求基于 DataPower 变量 var://service/URL-in 的值,该值通常会使用请求所传入的 IP 地址。在大多数情况下,Host 会是更好的选择,尤其在需要考虑负载平衡的时候。 Security 此部分中的第一个指标是 Use SSL for Login,它定义您是否希望使用 SSL 执行身份验证;也就是说,您重定向到的 URL 是否应使用 HTTPS 连接到不同的端口(在 Web 上通常为 443)。仅使用 SSL 执行身份验证通常不是一种好的做法;如果需要使用 SSL,那么所有流量都应加密。因此,您通常会将此选项关闭,确保您配置的网关仅接收通过 SSL 传递的流量。如果使用一个样式表生成登录表单,SSL 选项不会出现在这里,您还应该确保您的网关仅接受通过 SSL 传递的流量。您应该始终使用一个 HTTPS 前端处理程序。对于此示例,我们通过 HTTP 展示了所有信息,所以您可以下载此示例并导入它,无需处理证书,但强烈建议所有信息都使用 SSL。 您可能认为,这个指标拥有 Enable Session Migration 这样的名称,这表明它仅在一个负载平衡的配置中有多个设备时使用。从某种程度上讲是这样的;它支持使用一个共享密钥(对称密钥加密),这样所有使用同一个密钥的设备就能够解密使用的 cookie。但是,如果不选择 Enable Session Migration 并指定一个密钥,使用的 cookie 就得不到保护。您必须在所有配置中指定一个共享密钥对象,该密钥将用于加密 cookie,否则您的 cookie 是不安全的。 Client-side URL fragments

您通过此选项告诉运行时,它在重定向到您的 HTML 基于表单的登录页面时应该使用哪些 URI。您配置登录、错误和注销页面,在发生登录、注销或身份验证错误时,运行时将基于这些 URI 生成 URL。如果用户直接访问登录页面;也就是是说,用户单击了一个直接指向登录页面的链接或在浏览器中键入完整的登录页面 URL,而不是尝试访问一个将他重定向到登录页面的受保护的资源,那么这里配置的默认 URL 是设备在身份验证后将用户重定向到的 URI。

Location of HTML pages

在这一部分中,您需要指定将用来存储您的表单的 HTML 页面的地方。此策略提供了一个从您代理的后端应用程序提供登录文件的示例。这是由维护应用程序本身的内容作者存储和更新它们的有用方式。您也可以将表单 HTML 代码直接存储在 DataPower 文件系统上的文件中,只要这么做对您的环境更合适;例如,一些组织有一条经验法则:未验证的流量完全无法绕过身份验证代理,甚至提供登录页面所需的流量。这是一条明智的法则(它最大程度地降低了风险),但它意味着这些页面必须基本独立(将 JavaScript 和级联样式表 (CSS) 嵌入到页面本身中,或者直接从网关中的一条额外规则提供它们,这增加了复杂性),它意味着这些 HTML 页面需要与您 Web 应用程序的剩余部分分开管理和分发。这里的示例页面使用了一个 CSS 来提供应用程序的相同外观,这个样式表直接从后端身份验证程序提供。

Login form properties

任何精通 Java EE 应用程序的人都会熟悉此部分的内容,至少熟悉它的默认设置(本文尚未介绍)。这些设置告诉运行时,它在提交了一个登录表单时应查找哪些参数,以便获取所提供的用户名和密码,并查找用户尝试访问的原始 URL(假设他在尝试访问一个受保护的资源后被重定向到登录页面)和登录表单所使用的 POST 操作。您可以在这里填入您喜欢的任何值 - 但是,在这里使用的任何值也必须用在登录表单本身的 HTML 中。请注意,POST 操作中使用的 URI 必须与该字符串准确匹配 – 例如,如果使用默认值 /j_security_check,那么某个提交到 /services/j_security_check 的表单将无效。

Timeouts

最后一部分定义经过验证的用户会话将保持有效的时长。这部分包括一个 Inactivity Timeout,它的默认值为 600 秒(10 分钟),还有一个 Session Lifetime,它的默认值为 1800 秒(半小时)。

这是 HTML 表单登录策略的定义。下一部分指定了您如何告诉运行时实际使用采用了 AAA 策略的策略。

时间: 2024-10-26 02:29:22

使用DataPower和HTML基于表单的登录实现轻松的前端身份验证的相关文章

在ASP.NET中如何用C#.NET实现基于表单的验证(一)

asp.net 这篇文章引用到了Microsoft .NET类库中的以下名空间:   System.Data.SqlClient    System.Web.Security-------------------------------   任务: 摘要:   1.要求 2.用Visual C#.NET 创建一个ASP.NET 应用程序  3.在Web.config文件里配置安全设置  4.创建一个数据库表样例来存放用户资料  5.创建Logon.aspx页面  6.编写事件处理代码来验证用户身

在ASP.NET中如何用C#.NET实现基于表单的验证(二)

asp.net (五)创建Logon.aspx页面1.在已创建好的项目里创建一个新的Web 窗体,名为Logon.aspx.2.在编辑器里打开Logon.aspx,切换到HTML视图.3.复制下面代码,然后在编辑菜单里"选择粘贴为HTML"选项,插入到<form>标签之间.    1<h3> 2   <font face="Verdana">Logon Page</font> 3</h3> 4<tab

SharePoint 2013中如何自定义Providers在基于表单的身份验证

由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取,而不是从Domain中获取,所以需要对SharePoint Application的身份验证(Claims Authentication Types)进行更改,即采用更加灵活的混合模式登录:Windows Authentication和Forms Based Authentication.故本篇博客将着重笔墨去介绍SharePoint 2013自定义Providers在基于表单的身份验(Forms-Ba

SharePoint 2013自定义Providers在基于表单的身份验证中的应用

由于项目的需要,登录SharePoint Application的用户将从一个统一平台中获取,而不是从Domain中获取,所以需要对SharePoint Application的身份验证(Claims Authentication Types)进行更改,即采用更加灵活的混合模式登录:Windows Authentication和Forms Based Authentication.故本篇博客将着重笔墨去介绍SharePoint 2013自定义Providers在基于表单的身份验(Forms-Ba

SharePoint 2013 配置基于表单的身份认证

前 言 这里简单介绍一下为SharePoint 2013 配置基于表单的身份认证,简单的说,就是用Net提供的工具创建数据库,然后配置SharePoint 管理中心.STS服务.Web应用程序的三处web.config即可.下面,让我们以图文的方式了解创建的具体过程吧. 使用微软提供的工具,创建数据库,找到Framework64下的aspnet_regsql,如下图: 这里我发现C:\Windows\Microsoft.NET\Framework64的v2.0.50727路径下和v4.0.303

在ASP.NET中如何用C#.NET实现基于表单的验证

这篇文章引用到了Microsoft.NET类库中的以下名空间:System.Data.SqlClientSystem.Web.Security -------------------------------任务:摘要: 1.要求2.用VisualC#.NET创建一个ASP.NET应用程序3.在Web.config文件里配置安全设置4.创建一个数据库表样例来存放用户资料5.创建Logon.aspx页面6.编写事件处理代码来验证用户身份7.创建一个Default.aspx页面8.附加提示 参考文章-

关于window.onload事件及post表单自动登录问题

问题描述 关于window.onload事件及post表单自动登录问题 各位道友好,关于onload在网上查了很多资料,各家众说纷纭. 最近做一个在A网站跳转B网站并自动登录,用户密码等用A网站此用户的资料.我的思路很简单:将数据从A中传到B,B接收数据,并将接收的数据填入表单,然后自动提交. 我提交的方式是用一个onload事件去调用登录按钮的函数. 但是在这个onload上出现了问题. 解决方案 1. window.onload=ParamOnload 改为 1. window.onload

validator-Validator验证表单,jqueryUI spinner控件值无法验证通过的

问题描述 Validator验证表单,jqueryUI spinner控件值无法验证通过的 在表单中试用了jqueryUI中的spinner ,表单使用jquery插件 formvalidate验证.当提交表单时会验证,在验证失败的控件上显示红叉.而当再次输入正确的值时该红叉会变为对号.在spinner中写值,直接提交空表.spinner控件上报红叉,该空间验证了不为空.可当通过spinner上的按钮给spinner赋值,spinner的验证还是失败.必须手写输入才行. 验证失败后点击spinn

login-用li设置登录表单时,登录和注册按钮已设定float:left;,可是注册按钮和登陆按钮不能在同一行

问题描述 用li设置登录表单时,登录和注册按钮已设定float:left;,可是注册按钮和登陆按钮不能在同一行 部分代码如下: #left li{ list-style-type: none; float: left; margin: 0px 0px 5px 0px; width: 100%; } #login{ width: 188px; height: 100px;/*设定高度,字体大小,影响是否所有li加起来高度超过这个高度*/ background-color: ghostwhite;