去年我做了JAX-WS客戶端中的Web服務this link如何把SAML令牌直接到JAX-WS的服務,而無需調用STSClient
此WebService使用STS service獲得SAML令牌並使用它來訪問主網絡服務。我使用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>
此外,這裏還有細微的差異。我現在有兩種方法:
- 如果我可以將舊代碼更改爲STS客戶端發送請求與這些值。我嘗試過但沒有成功。
- 它們提供了一些支持從STS客戶端獲取SAML斷言令牌和證明令牌的代碼。如果我可以直接將SAML斷言標記放入我的JAX-WS客戶端,那麼這個問題也可以解決。
任何幫助或建議將認識到我們
我不確定如何在客戶端代碼中放置ActAs元素。如果您可以提供一些更好的細節方式,例子會很棒。現在我正在覆蓋默認的JAX-WS代碼來實現這個目標。我的意思是我試圖覆蓋他們的代碼。 –
查看此配置:https://github.com/apache/cxf/blob/master/services/sts/systests/basic/src/test/resources/org/apache/cxf/systest/sts/username_actas/cxf-client .XML - 在「ACTAS」屬性是指一類https://github.com/apache/cxf/blob/master/rt/ws/security/src/main/java/org/apache/cxf/ws/security/信任/委派/ WSSUsernameCallbackHandler.java - 這增加了一個用戶名令牌元素變成「ACTAS」 –
感謝您的建議。我會測試一下。 –