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

时间:2017-05-29 13:26:30

标签: java cxf jax-ws wsdl2java jax-ws-customization

去年,我在this link

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

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

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

我尝试修改当前代码,以便它支持新的STS服务。但我的代码发送相同的RequestSecurityToken请求。我的意思是它不采用新的要求。我试图采纳这个,但我做不到。

新的STS服务需要http://www.w3.org/2001/04/xmldsig-more#rsa-sha256作为新的签名方法,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客户端,那么这个问题也就解决了。
  3. 我们将不胜感激任何帮助或建议

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我收到“验证邮件安全性时发生错误”。使用Metro 2.3.1时,我必须进行两项更改以解决此问题-

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

    sp:AlgorithmSuite signatureAlgorithm =“ SHA256withRSA”

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