使用 SAML 或 UserNameToken 配置文件确保 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 服务提供程序之间进行基于 SAML 和基于 UserNameToken 的验证,其中访问管理器支持应用服务器的 Web 服务客户端和服务器端容器所使用的 WS-Security 标准。
先决条件
要了解本教程,您需要具备 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" 节点的旁边显示一个绿色箭头标记。
注意:如果“启动”选项不可用,则说明服务器已在运行。
返回页首
创建教程项目
两个教程项目为:StockServer 和 StockClient。
创建 StockServer 项目:
- 从 IDE 的主菜单中,选择“文件”>“新建项目”。
- 在“类别”列表中,展开“样例”节点,然后选择 "Identity Blueprint" 节点。
- 在“项目”列表中,选择“股票服务”。
- 单击“下一步”。
- 接受缺省项目名称 (StockServer),但是可以选择更改项目位置。
- 单击“完成”。
创建 StockClient 项目:
- 从 IDE 的主菜单中,选择“文件”>“新建项目”。
- 在“类别”列表中,展开“样例”节点,然后选择 "Identity Blueprint" 节点。
- 在“项目”列表中,选择“股票客户端”。
- 单击“下一步”。
- 接受缺省项目名称 (StockClient) 和项目位置值。
- 单击“完成”。
现在,“项目”窗口会包含一个 "StockClient" 项目节点。
返回页首
确保 Web 服务的安全:使用 SAML-HolderOfKey 安全机制
在本方案中,我们将使用没有签名响应的 SAML-HolderOfKey 安全配置文件,并使用缺省密钥库。为此,我们首先需要编辑访问管理器的标记配置文件,然后配置 Web 服务提供程序和客户端。
编辑 SAML-HolderOfKey 配置文件:
- 在“运行环境”窗口中,展开 "Sun Java System Access Manager" 节点,然后展开“缺省实例”和“配置文件”节点。
- 选择 "SAML-HolderOfKey" 节点,单击鼠标右键,然后选择“编辑”。
将打开“编辑 SAML-HolderOfKey 配置文件”对话框。
- 清除“签名响应”复选框。
- 在“现有证书设置”下面,将“使用缺省密钥库”复选框保留为选中状态。
- 单击“确定”。

配置 Web 服务提供程序:
- 在“项目”窗口中,展开 "StockServer" 节点和“Web 服务”节点。
- 在“Web 服务”节点下面,右键单击 "stockservice" 节点,然后从弹出式菜单中选择“编辑 Web 服务属性”。
将打开“Web 服务提供程序安全配置”对话框。
- 选中“启用消息级别安全功能”复选框。
- 在“安全机制”下面,从“请求”下拉列表中选择 "SAML-HolderOfKey"。

- 单击“确定”。
配置 Web 服务客户端:
- 在“项目”窗口中,展开 "StockClient" 节点和“Web 服务引用”节点。
- 在“Web 服务引用”节点下面,右键单击 "Stockservice" 节点,然后从弹出式菜单中选择“编辑 Web 服务属性”。
将打开“Web 服务客户端安全配置”对话框。
- 选中“启用消息级别安全功能”复选框。
- 在“安全机制”下面,从“请求”下拉列表中选择 "SAML-HolderOfKey"。
- 在“现有证书设置”下面,将“使用缺省密钥库”复选框保留为选中状态。

- 单击“确定”。
现在,您可以按照部署并运行项目中的说明继续部署并运行样例了。
返回页首
确保 Web 服务的安全:使用 UserNameToken 安全机制
在本方案中,我们将使用具有签名响应的 UserNameToken 安全配置文件,并使用缺省密钥库。为此,我们首先需要编辑访问管理器的标记配置文件,然后配置 Web 服务提供程序和客户端。
编辑 UserNameToken 配置文件:
- 在“运行环境”窗口中,展开 "Sun Java System Access Manager" 节点,然后展开“缺省实例”和“配置文件”节点。
- 选择 "UserNameToken" 节点,单击鼠标右键,然后选择“编辑”。
将打开“编辑 UserNameToken 配置文件”对话框。
- 在“现有证书设置”下面,将“使用缺省密钥库”复选框保留为选中状态。
- 在“用户名标记配置文件信息”下面,单击“添加”按钮为 Web 服务客户端添加一个 UserNameToken 记录。
将打开“添加用户”对话框。
- 在“用户名”字段中键入 sherry,在“口令”字段中键入 mypw,然后单击“确定”。

- 单击“确定”以关闭“编辑 UserNameToken 配置文件”对话框。
配置 Web 服务提供程序:
- 在“项目”窗口中,展开 "StockServer" 节点和“Web 服务”节点。
- 在“Web 服务”节点下面,右键单击 "stockservice" 节点,然后从弹出式菜单中选择“编辑 Web 服务属性”。
将打开“Web 服务提供程序安全配置”对话框。
- 选中“启用消息级别安全功能”复选框。
- 在“安全机制”下面,从“请求”下拉列表中选择 "UserNameToken"。

- 单击“确定”。
配置 Web 服务客户端:
- 在“项目”窗口中,展开 "StockClient" 节点和“Web 服务引用”节点。
- 在“Web 服务引用”节点下面,右键单击 "Stockservice" 节点,然后从弹出式菜单中选择“编辑 Web 服务属性”。
将打开“Web 服务客户端安全配置”对话框。
- 选中“启用消息级别安全功能”复选框。
- 在“安全机制”下面,从“请求”下拉列表中选择 "UserNameToken"。
- 在“用户名”字段中键入 sherry,在“口令”字段中键入 mypw。
- 选中“验证响应”复选框。
- 在“现有证书设置”下面,将“使用缺省密钥库”复选框保留为选中状态。

- 单击“确定”。
现在,您可以按照部署并运行项目中的说明继续部署并运行样例了。
返回页首
部署并运行项目
- 在“项目”窗口中,右键单击 "StockServer" 项目节点,然后选择“部署项目”。
IDE 将执行以下操作:
- 启动应用服务器(如果尚未启动)。
- 生成 StockServer 项目。您可以在“输出”窗口中看到生成结果。
- 将 server.war 部署到应用服务器上。
- 在“项目”窗口中,右键单击 "StockClient" 项目节点,然后选择“运行项目”。
IDE 将执行以下操作:
- 生成 StockClient 项目。您可以在“输出”窗口中看到生成结果。
- 将 client.war 部署到应用服务器上。
- 在浏览器中打开应用程序
- 请确保在浏览器中打开以下 URL:
http://localhost:8080/stockclient/

- 单击 "Submit"。

返回页首
浏览日志文件
本部分中的说明是可选的。对于需要查看日志文件中的更改的用户,这些说明将会很有用。
- 在继续执行下一步之前,请启用最详细的日志记录级别。
请按照更改应用服务器上的安全级别中的说明进行操作。
- 在“项目”窗口中,右键单击 "StockClient" 项目节点,然后从弹出式菜单中选择“运行项目”。
- 在以下目录中,打开应用服务器日志文件 (server.log):application-server-installation-directory\domains\domain1\logs。
如果在安装过程中接受了缺省值,则该目录应为 C:\Sun\AppServer\domains\domain1\logs。
- 请注意日志文件中的更改。
已更改的日志文件显示模块正在使用配置面板中定义的方法。
下面的链接提供了日志文件修改部分的样例。
返回页首
其他配置任务
本部分提供了您可能需要执行的其他配置任务的相关信息。
添加应用服务器
- 在“运行环境”窗口中,右键单击“服务器”节点,然后从弹出式菜单中选择“添加服务器”。
将打开“添加服务器实例”对话框。
- 在“选择服务器”页中,从“服务器”下拉列表中选择 "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 以外的端口上完成的,则必须执行额外的配置步骤,如下所示。
- 在“项目”窗口中,展开 "StockClient" >“Web 页”> "WEB-INF" 和 "wsdl",然后在编辑器中打开 stock.wsdl 文件。
- 单击“源”按钮以切换至该文件的“源”视图。
- 滚动到文件的底部并找到以下行:
<soap:address location="http://localhost:8080/stockservice/stockservice" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"/>
- 将值 8080 替换为安装应用服务器时所用的端口号。
- 保存所做的更改并关闭该文件。
返回页首
更改应用服务器上的安全级别
- 在“运行环境”窗口中,右键单击 "Sun Java System Application Server 9" 节点,然后选择“查看管理控制台”。
- 键入 admin 作为用户名,键入 adminadmin 作为口令。
- 在左侧的导航框架中,单击“应用服务器”链接。
- 在右侧的框架中,单击“日志记录”标签,然后单击“日志级别”标签。

- 滚动到页面底部,将“安全”设置为“最详细”。

- 单击“保存”按钮,然后注销。
返回页首
疑难解答
本部分将为您可能遇到的问题提供有关解决方法的信息。
调用客户端时抛出异常
在调用客户端时,它在浏览器上抛出了以下异常:
Caught an exception java.rmi.ServerException: JAXRPCSERVLET28: Missing port information
出现此异常的原因可能是:
- 为客户端选择的安全机制不在服务器支持的机制列表中。在这种情况下,请确保为客户端和服务器选择了相同的安全机制。
参考资料
返回页首
小结
在本教程中,您使用了 NetBeans Enterprise Pack 5.5 将基于 SAML 和 UserNameToken 的验证添加到了应用程序中。本教程向您说明了 NetBeans 提供的安全验证的简单易用性,因为您只需使用 Web 服务客户端和提供程序安全配置向导就可以实现这些安全机制,并不需要您深入了解 SAML!
返回页首