2

我们想要构建一个前端 Web 应用程序,以使用 JAX-WS 使用 WPS 的 HumanTask API。此 Web 应用程序应该能够查询特定用户的当前任务、声明任何其他用户之前未声明的任务、完成任务等。此 Web 应用程序将部署在 WAS 7.0 上,它位于与提供 HumanTask 服务的单元不同的单元上(目前我们正在使用另一个 WPS 实例作为 WAS,但最终它将是一个没有 WPS 功能的简单 WAS)。我们通过以下步骤同步了 LTPA 生成密钥:

  1. 登录一个单元格
  2. 转到“安全”>“全球安全”。在“身份验证”下单击“LTPA”
  3. 在“跨单元单点登录”下
    1. 建立密码
    2. 确认密码
    3. 输入将导出 LTPA 密钥的文件名
    4. 点击“导出密钥”
  4. 登出
  5. 将生成的文件复制到另一台服务器
  6. 登录到另一个单元格
  7. 转到“安全”>“全球安全”。在“身份验证”下单击“LTPA”
  8. 在“跨单元单点登录”下
    1. 输入以前的密码
    2. 确认密码
    3. 使用导出的 LTPA 密钥输入文件名
    4. 点击“导入密钥”
  9. 重启服务器

我们使用 GWT 作为概念证明开发了一个简单的 Web 应用程序,它具有一个简单的 UI 和一个使用 HumanTask JAX-WS 服务的 Web 服务客户端。此 Web 应用程序受到 Siteminder 身份验证器的保护(当第一次进入 Web 应用程序时,Siteminder 代理会重定向到请求凭据的 Web 表单)。Web 服务客户端是按照 JAX-WS 标准开发的,没有添加额外的依赖项,我们依赖于 WebSphere JAX-WS 实现(Apache Axis2)。部署后,我们在没有运气的情况下测试了两个场景:

方案 A

  • 默认情况下,WPS 的 HumanTask 服务提供者附加到策略集“BPC Web 服务”,默认策略集绑定和策略集共享被禁用。
  • 我们将 HumanTask 服务客户端配置为使用与服务提供者相同的策略集。
  • 登录到自定义 Web 应用程序。当尝试查询当前任务时,我们得到以下异常:

    com.ibm.wsspi.wssecurity.core.SoapSecurityException: security.wssecurity.WSSContextImpl.s02: com.ibm.websphere.security.WSSecurityException: Exception org.apache.axis2.AxisFault: CWWSS6521E: The Login failed because of an exception: javax.security.auth.login.LoginException: Login Failure: all modules ignored ocurred while running action: com.ibm.ws.wssecurity.handler.WSSecurityGeneratorHandler$2@6fef6fef
    

服务提供商端没有错误消息。

方案 B

  • 更改 WPS 的 HumanTask 服务提供者配置,通过 HTTP GET 启用策略集共享。这种方式服务提供者 WSDL 包含有关策略集的信息。
  • 更改服务客户端的策略集配置以使用 HTTP GET 从提供者获取策略集。
  • 登录到自定义 Web 应用程序。当尝试查询当前任务时,我们得到以下异常:

    javax.xml.ws.soap.SOAPFaultException: security.wssecurity.WSSContextImpl.s02: com.ibm.websphere.security.WSSecurityException: Exception org.apache.axis2.AxisFault: CWWSS6521E: The Login failed because of an exception: javax.security.auth.login.LoginException: Login module com.ibm.ws.wssecurity.wssapi.token.impl.UNTConsumeLoginModule login() method returned false ocurred while running action: com.ibm.ws.wssecurity.handler.WSSecurityConsumerHandler$1@54a054a0
    

在到达报告先前异常的点之前,我们在服务客户端日志中看到以下警告:

CWWSS7053W: No web services security custom bindings were found. Default bindings will be used.

在服务提供商日志中,我们可以看到以下错误:

CWWSS5514E: An exception while processing WS-Security message.

并且生成了一组 FFDC,报告了我们在服务客户端遇到的相同异常。

能帮助我们的人会很棒!

4

1 回答 1

2

我们遇到了同样的问题,但通过以下步骤设法解决了它。本质上,您需要更改应用于 HTM JAXWS API 的默认策略集(默认值实际上只是一个示例)并使用自定义提供者绑定,该绑定能够通过“调用者”提取包含在 LTPA 令牌中的身份。以下步骤:

创建自定义策略集绑定

1) 单击“服务”>“策略集”>“常规提供程序策略集绑定” 2) 选择“提供程序示例”绑定并单击“复制...” 3) 输入名称为“LTPA Authenticated Caller”并单击确定4) 在绑定列表中单击“LTPA Authenticated Caller” 5) 单击“WS-Security”,然后单击“Caller” 6) 单击“New”并输入以下详细信息(其他字段留空) 名称:auth_ltpa Caller identity本地部分:LTPAv2 调用者身份名称空间 URI:http ://www.ibm.com/websphere/appserver/tokentype 单击确定

分配策略集和绑定

1) 展开“服务”,单击“服务提供者” 2) 单击“HTMJAXWSService” 3) 单击复选框以选择策略集附件列表中的 HTMJAXWSService 服务,然后单击附加策略集下拉列表中的“LTPA WSSecurity default”下拉列表 4) 单击复选框以选择 Policy Set Attachments 列表中的 HTMJAXWSService 服务,然后单击 Assign Binding 下拉列表中的“LTPA Authenticated Caller” 5) 保存对主配置的所有更改。

分配策略集和绑定

1) 展开“服务”,单击“服务客户端” 2) 单击“已部署资产”列与包含您要配置的客户端的模块匹配的“HTMJAXWSService”链接 3) 单击复选框以选择 HTMJAXWSService 服务Policy Set Attachments 列表,然后单击 Attach Policy Set 下拉列表中的“LTPA WSSecurity default”。确保此设置被所有子级别(即端口和所有方法)继承 4) 单击复选框以选中 Policy Set Attachments 列表中的 HTMJAXWSService 服务,然后单击 Assign Binding 下拉列表中的“Default” 5 ) 保存对主配置的所有更改

结论

现在应该可以使用 LTPA 身份验证从您的客户端调用 HTM API。为此,您的客户端应用程序需要配置为要求身份验证或为未经身份验证的 URL 提供身份验证(后者适用于期望 SiteMinder TAI 预填充经过身份验证的用户身份的应用程序)。

希望这可以帮助!

于 2011-10-13T08:13:19.977 回答