使用 Liberty 标记配置文件确保 Web 服务的安全
最新更新日期:2006 年 11 月 14 日
撰稿人:Sherry Barkodar,修订人:Annette Wegscheider
NetBeans Enterprise Pack 5.5 捆绑了所有必需的运行环境,从而使您可以开发基于身份验证的安全 Web 服务客户端和提供程序。这些运行环境包括:
- Sun Java System Application Server Platform Edition 9 Update 1
- Sun Java System Access Manager 7.1 和 Sun Java System Policy Agent 2.2 for Web Services
本教程向您说明了如何在企业或组织中确保基于身份验证的 Web 服务提供程序 (Web Service Provider, WSP) 的安全。在 Web 服务客户端与 Web 服务提供程序之间的 Web 服务交互中,身份验证具有如下特点:
- 对访问 Web 服务提供程序的 Web 服务客户端进行身份验证
- 对访问 Web 服务客户端以便能与 Web 服务提供程序对话的最终用户进行身份验证
Netbeans Enterprise Pack 为以下两类标记配置文件提供支持:
- 基本安全配置文件 (WSI) 标记只在 Web 服务客户端与 Web 服务提供程序之间的交互中使用。在此,传递给 Web 服务提供程序的唯一身份验证信息是 Web 服务客户端的身份验证信息。
- 当需要获取最终用户的身份验证时,才会使用 Liberty 安全标记配置文件。此处的最终用户是指使用 WSC 从 WSP 中请求服务的用户。IDE 将自动为 WSP 验证最终用户,并将 WSP Java EE Web 服务的安全环境设置为最终用户的安全环境。
本教程介绍了 IDE 是如何使用 Liberty 标记配置文件将调用方的身份验证发送到日历服务的。
先决条件
要了解本教程,您需要具备 Java 语言及其平台以及 NetBeans IDE 的一些基本知识或编程经验。
系统要求
本教程假定您的系统满足 NetBeans Enterprise Pack 5.5 发行说明的“系统要求”主题中指定的要求。
本教程所需的软件
在开始之前,您必须在计算机中安装以下软件:
- 包含 NetBeans Enterprise Pack 5.5 的 NetBeans IDE 5.5(下载)
- 要完成本教程中的部署步骤,必须安装 Sun Java System Application Server Platform Edition 9 Update 1。该应用服务器与 NetBeans Enterprise Pack 5.5 下载捆绑在一起。
目录
返回页首
配置教程环境
- 启动 IDE。
- 要验证是否在 IDE 中配置了 Sun Java System Application Server,请单击“运行环境”标签,然后展开“服务器”节点。
- 如果“服务器”节点不包含 "Sun Java System Application Server 9" 节点,请按照添加应用服务器中的步骤进行操作。
- 在“运行环境”窗口中,展开“服务器”节点,右键单击 "Sun Java System Application Server 9" 节点,然后从弹出式菜单中选择“启动”。
一直等到“输出”窗口中显示以下消息:
“应用服务器启动完成。”
当服务器处于运行状态时,IDE 将在 "Sun Java System Application Server 9" 节点的旁边显示一个绿色箭头标记。
注意:如果“启动”选项不可用,则说明服务器已在运行。
返回页首
创建教程项目
两个教程项目为:CalendarServer 和 CalendarClient。日历应用程序是对创建日历事件的简单实现。它包含了日历事件的静态图并可根据需要返回它们。
创建 CalendarServer 项目:
- 从 IDE 的主菜单中,选择“文件”>“新建项目”。
- 在“类别”列表中,展开“样例”节点,然后选择 "Identity Blueprint" 节点。
- 在“项目”列表中,选择“日历服务”。
- 单击“下一步”。
- 接受缺省项目名称 (CalendarServer),您可以选择更改项目的位置。
- 单击“完成”。
将显示一个进度对话框,然后会在“项目”窗口中显示 "CalendarServer" 项目节点。
创建 CalendarClient 项目:
- 从 IDE 的主菜单中,选择“文件”>“新建项目”。
- 在“类别”列表中,展开“样例”节点,然后选择 "Identity Blueprint" 节点。
- 在“项目”列表中,选择“日历客户端”。
- 单击“下一步”。
- 接受缺省项目名称 (CalendarClient) 和项目位置值。
- 单击“完成”。
将显示一个进度对话框,然后会在“项目”窗口中显示 "CalendarClient" 项目节点。
返回页首
使用 Liberty 安全机制确保 Web 服务的安全
在部署项目之前,必须使用一个 Liberty 安全机制来确保 Web 服务的安全。在本方案中,我们将使用 Liberty Bearer Token 安全配置文件。
配置 Web 服务提供程序:
- 在“项目”窗口中,展开 "CalendarServer" 项目节点和“Web 服务”节点。
- 在“Web 服务”节点下面,右键单击 "CalendarService" 节点,然后从弹出式菜单中选择“编辑 Web 服务属性”。
在打开 Web 服务属性编辑器的同时,“安全”标签将处于选中状态,从而使您可以在其中配置 Web 服务提供程序的安全功能。
- 选中“启用消息级别安全功能”复选框。
- 在“安全机制”下面,从“请求”下拉列表中选择 "LibertyBearerToken"。

- 单击“确定”。
配置 Web 服务客户端:
- 在“项目”窗口中,展开 "CalendarClient" 节点和“Web 服务引用”节点。
- 在“Web 服务引用”节点下面,右键单击 "CalendarService" 节点,然后从弹出式菜单中选择“编辑 Web 服务属性”。
在打开 Web 服务属性编辑器的同时,“安全”标签将处于选中状态,从而使您可以在其中配置 Web 服务客户端的安全功能。
- 选中“启用消息级别安全功能”复选框。
- 在“安全机制”下面,从“请求”下拉列表中选择 "LibertyDiscoverySecurity"。
- 选中“验证响应”复选框以验证响应。
- 在“现有证书设置”下面,将“使用缺省密钥库”复选框保留为选中状态。

- 单击“确定”。
返回页首
部署并运行项目
- 在“项目”窗口中,右键单击 "CalendarServer" 项目节点,然后选择“部署项目”。
IDE 将执行以下操作:
- 启动应用服务器(如果尚未启动)。
- 生成 CalendarServer 项目。
您可以在“输出”窗口中看到生成结果。
- 将 server.war 部署到应用服务器上。
- 在“项目”窗口中,右键单击 "CalendarClient" 项目节点,然后选择“运行项目”。
IDE 将执行以下操作:
- 生成 CalendarClient 项目。
您可以在“输出”窗口中看到生成结果。
- 将 client.war 部署到应用服务器上。
- 在浏览器中打开应用程序。
- 在“用户名”和“口令”字段中键入 jsmith。

- 单击“登录”。
将打开应用程序的欢迎页。
- 从下拉列表中选择 "jsmith",然后在日期字段中输入日期,或者接受缺省值。

- 单击 "Get events"。
请注意,这样就发布了 jsmith 的日历。

返回页首
浏览客户端应用程序部署描述符
- 在“项目”窗口中,展开 "CalendarClient" 项目节点,然后展开“配置文件”节点。
- 右键单击 "sun-web.xml" 节点,然后选择“编辑”。
请注意第 3 行:
<sun-web-app error-url="" httpservlet-security-provider="AMHttpProvider">
然后从第 15 行开始查看:
<message-security-binding auth-layer="SOAP" provider-id="AMClientProvider">
<message-security>
<message/>
<request-protection auth-source="content"/>
<response-protection auth-source="content"/>
</message-security>
</message-security-binding>
请注意,这些提供程序确保了 Web 服务使用 Liberty 标记配置文件来保证与 CalendarServer 的安全对话。
下图说明了通过身份验证提供程序 (Identity Provider, IDP) 和搜索服务 (Discovery Service, Disco) 完成的从 Web 服务客户端 (Web Service Client, WSC) 到 Web 服务提供程序 (Web Service Provider, WSP) 的请求工作流。请记住,此 WSC 访问中涉及一个最终用户,并且该用户的身份验证是在此安全环境中最终传送给 Web 服务提供程序的身份验证。

上图中提到的 HTTPProvider 是在 Sun 部署描述符中配置的 AMHttpProvider。类似地,SOAPProvider 是在 Sun 部署描述符中配置的 AMClientProvider。WSP 首先是作为 IDE 中的部署部分在搜索服务中进行注册的。然后,当 WSC 尝试向 WSP 发送请求时,先使用访问管理器对访问 WSC 的最终用户进行成功验证以便与搜索服务进行交互。接下来,工作流会继续获取 WSP 凭证,并将请求发送给 WSP。收到请求后,WSP 中配置的 Liberty SOAPProvider 执行标记验证,并将主题设置为 WSC 端的验证用户的主题。此时,将继续执行 WSP 的业务逻辑。
返回页首
浏览日志文件
本部分中的说明是可选的。对于需要查看日志文件中的更改的用户,这些说明将会很适用。
- 在继续执行下一步之前,请启用最详细的日志记录级别。
请按照更改应用服务器上的安全级别中的说明进行操作。
- 在“项目”窗口中,右键单击 "CalendarClient" 项目节点,然后从弹出式菜单中选择“运行项目”。
- 在以下目录中,打开应用服务器日志文件 (server.log):application-server-installation-directory\domains\domain1\logs。
如果在安装过程中接受了缺省值,则该目录应为 C:\Sun\AppServer\domains\domain1\logs。
- 查找 ServerAuthContext.validateRequest 和 ClientAuthContext.secureRequest 以查看日志文件中的更改。
下面的链接提供了日志文件修改部分的样例。
返回页首
其他配置任务
本部分提供了您可能需要执行的其他配置任务的相关信息。
添加应用服务器
- 在“运行环境”窗口中,右键单击“服务器”节点,然后从弹出式菜单中选择“添加服务器”。
将打开“添加服务器实例”对话框。
- 在“选择服务器”页中,从“服务器”下拉列表中选择 "Sun Java System Application Server"。
- (可选)在“名称”字段中,接受缺省值,或键入要用来在 IDE 中标识服务器的名称。
- 单击“下一步”。
将打开“平台文件夹位置”页。
- 在“平台位置”字段中,使用“浏览”按钮导航并选择应用服务器的安装位置。
如果在安装过程中接受了缺省值,则该位置应为 C:\Sun\Appserver。
- 选择“注册本地缺省域”单选按钮。
- 单击“下一步”。
- 提供域管理员的用户名和口令。
如果在安装过程中接受了缺省值,则用户名应为 admin,口令为 adminadmin。
- 单击“完成”。
返回页首
验证访问管理器安装的配置
- 启动应用服务器。
- 在“运行环境”窗口中,展开 "Sun Java System Access Manager" 节点。
- 右键单击“缺省实例”节点,然后选择“查看管理控制台”。
将启动一个新的浏览器会话,该会话指向以下 URL:http://localhost:8080/amserver。
此外,还将打开 Sun Java System Access Manager 登录页,表明访问管理器服务器正在运行。
返回页首
未安装在端口 8080 上的应用服务器的配置信息
如果 Sun Java System Application Server 安装是在 8080 以外的端口上完成的,则必须执行额外的配置步骤,如下所示。
- 在“项目”窗口中,展开 "CalendarClient" >“Web 页”> "WEB-INF" 和 "wsdl",然后在编辑器中打开 "CalendarService.wsdl" 文件。
- 单击“源”按钮以切换至该文件的“源”视图。
- 滚动到文件的底部并找到以下行:
<soap:address location="http://localhost:8080/CalendarService/CalendarService"/>
- 将值 8080 替换为安装应用服务器时所用的端口号。
- 保存所做的更改并关闭该文件。
返回页首
更改应用服务器上的安全级别
- 在“运行环境”窗口中,右键单击 "Sun Java System Application Server 9" 节点,然后选择“查看管理控制台”。
- 键入 admin 作为用户名,键入 adminadmin 作为口令。
- 在左侧的导航框架中,单击 "Application Server" 链接。
- 在右侧的框架中,单击“日志”标签,然后单击“日志级别”标签。

- 滚动到页面底部,将“安全性”设置为 "FINEST"。

- 单击“保存”按钮,然后注销。
返回页首
为 LibertySAMLToken 配置文件提供配置支持
对于 Liberty 样例,NetBeans Enterprise Pack 支持以下三种标记配置文件:LibertyBearerToken、LibertyX509Token 和 LibertySAMLToken。如果要使用 LibertySAMLToken 配置文件,则必须执行以下手动配置步骤:
- 确保应用服务器正在运行。
- 启动一个新的浏览器会话,使其指向以下 URL:http://localhost:8080/amserver。
- 在登录屏幕上,使用以下值进行登录:
用户:amadmin
口令:admin123(这是缺省口令)。
- 单击“Web 服务”标签,然后在“Web 服务”页中单击“搜索服务”标签。
- 滚动到页面的底部,然后在“用于引导的资源提供”区域中单击缺省的服务类型 urn:liberty:disco:2003-08。
将打开“编辑资源提供”页。
- 在“服务实例”下面的“服务说明”区域中,选中位于 urn:liberty:security:2003-08:null:null 条目旁边的复选框,然后单击“删除”按钮。
现在,“服务说明”区域中不包含任何项。
- 在“服务说明”区域中,单击“新建描述”按钮。
将打开“新建安全机制 ID”页。
- 在“新建安全机制 ID”页的“可用”列表中,选择 "urn:liberty:security:2005-02:null:X509",然后单击“确定”。
注意:如果系统要求您提供端点 URL,则可以使用 http://localhost:8080/amserver/Liberty/disco。如果服务器未安装在端口 8080 上,请将 8080 替换为正确的端口号。
将打开“编辑资源提供”页,并且在“服务实例”下面的“服务说明”区域中,现在会包含一个标记为 urn:liberty:security:2005-02:null:X509 的条目。
- 在“编辑资源提供”页中单击“保存”,然后在“搜索服务”页中单击“保存”。
- 在位于页面上方的导航区域中,单击“注销”。
返回页首
疑难解答
本部分将为您可能遇到的问题提供有关解决方法的信息。
调用客户端时抛出异常
调用客户端时,在浏览器上抛出了以下异常:
Caught an exception java.rmi.ServerException: JAXRPCSERVLET28: Missing port information
出现此异常的原因可能是:
- 为客户端选择的安全机制不在服务器支持的机制列表中。在这种情况下,请确保为客户端和服务器选择了相同的安全机制。
返回页首
参考资料
返回页首
小结
在本教程中,您使用了 NetBeans Enterprise Pack 5.5 来确保基于身份验证的 Web 服务提供程序 (Web Service Provider, WSP) 的安全。您对日历 Web 服务使用了基于 Liberty 安全配置文件的验证,并且还了解了如何确保基于身份验证的 Web 服务提供程序 (Web Service Provider, WSP) 的安全,以及如何验证通过 Web 服务客户端 (Web Service Client, WSC) 访问 Web 服务的用户。本教程向您说明了 NetBeans 提供的安全验证的简单易用性,因为您只需使用 Web 服务客户端和提供程序安全配置向导!
返回页首