如何在不调用 STSClient 的情况下将 SAML 令牌直接放入 JAX-WS 服务

How to put SAML token directly into JAX-WS service without calling STSClient

去年我在 this link

中为 Web 服务制作了 JAX-WS 客户端

此网络服务使用 STS service 获取 SAML 令牌并使用它访问主网络服务。我使用 apache cxf 的 wsdl2java 为此 web 服务生成 JAX-WS 客户端。一切都很好。

最近他们更新了他们的 STS 服务端点。 This 新的 STS 服务端点。其中有不同的签名和摘要算法。它在请求正文中有一些额外的元素。

我尝试修改当前代码以使其支持新的 STS 服务。但是我的代码正在发送相同的 RequestSecurityToken request.I 意味着它没有采用新的要求。我想采纳这个,但我做不到。

需要新的 STS 服务 http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 as new signature method and http://www.w3.org/2001/04/xmlenc#sha256 作为新的摘要算法。此外,它还需要请求正文中的以下元素:

    <tr:ActAs xmlns:tr="http://docs.oasis-open.org/ws-sx/ws-trust/200802">
<v13:RelationshipToken xmlns:v13="http://vanguard.business.gov.au/2016/03" ID="1bc9a44e-dccd-49e2-8f29-40d7b1257325">
<v13:Relationship v13:Type="OSPfor">
<v13:Attribute v13:Name="SSID" v13:Value="1234567895"/>
</v13:Relationship>
<v13:FirstParty v13:Scheme="uri://abr.gov.au/ABN" v13:Value="27809366375"/>
<v13:SecondParty v13:Scheme="uri://abr.gov.au/ABN" v13:Value="89567587874"/>
</v13:RelationshipToken>
</tr:ActAs>

此外,这里还有细微差别。我现在认为有两种方法:

  1. 如果我可以将旧代码更改为 STS 客户端发送具有这些值的请求。我尝试过但没有成功。
  2. 他们提供了一些支持从 STS 客户端获取 SAML 断言令牌和证明令牌的代码。如果我可以将 SAML 断言令牌直接放入我的 JAX-WS 客户端,那么这个问题也可以解决。

如有任何帮助或建议,我们将不胜感激

SHA-256 摘要算法通常是使用需要它的 AlgorithmSuite 策略设置的(例如 Basic256Sha256)。然而,我在政策中看到他们仍在使用 "Basic256"。 CXF 允许您通过一些配置属性配置 RSA-SHA256(参见 'ws-security.asymmetric.signature.algorithm' 此处的示例 http://cxf.apache.org/docs/ws-securitypolicy.html)。您可以直接在 STSClient 上设置 ActAs Object/Element。

我正在接收 "An error occurred when verifying security for the message"。在使用 Metro 2.3.1 时,我必须进行两项更改才能解决此问题 -

  1. 在STS wsdl中,需要像这样提到签名算法---

    sp:AlgorithmSuite signatureAlgorithm="SHA256withRSA"

  2. 在USI wsdl中,需要将AlgorithmSuite从Basic256Sha256Rsa15改为Basic256