我寫的用地鐵/ WSIT庫一個Java Web服務客戶端,web服務,我需要打的WCF服務請求後,不理解SOAP安全頭。 (我幾乎無法控制服務端和WSDL)。WSIT自定義安全頭
Web服務使用安全令牌服務(WS-Trust/WSDL)與傳輸級安全(SSL)和聯合安全模型進行了安全保護。的WS-Security)。我使用Windows Identity Foundation輕鬆地在.NET中實現了客戶端,首先發布安全令牌,然後使用(CreateChannelWithIssuedToken)方法向其他Web服務發出請求。
我有困難mimicing在Java的這種行爲,但是,使用地鐵/ WSIT。我的理解是,由於WSDL中缺少WS-Policy信息,WSIT將不會啓用與服務通信的安全處理。我通過在發送SOAP請求頭之前操作SOAP來創建請求,並且現在我正在接收與在.NET客戶端上收到的消息相同的消息。
現在,我的問題是,我收到以下錯誤:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: MustUnderstand headers:[{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security] are not understood
at com.sun.xml.ws.protocol.soap.MUTube.createMUSOAPFaultException(MUTube.java:148)
at com.sun.xml.ws.protocol.soap.ClientMUTube.processResponse(ClientMUTube.java:96)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:972)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775)
at com.sun.xml.ws.client.Stub.process(Stub.java:429)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:168)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151)
因爲SOAP響應在標頭中的安全部分:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="_0">
<u:Created>2012-05-14T21:20:08.782Z</u:Created>
<u:Expires>2012-05-14T21:25:08.782Z</u:Expires>
</u:Timestamp>
</o:Security>
</s:Header>
<s:Body>
...
既然我不能修改WSDL有沒有一種方法可以手動強制Metro/WSIT爲響應啓用安全處理,以避免引發此異常?我不打算使用安全標頭,並且響應的有效負載如預期的那樣。我明白我看到的是正確的行爲,如果客戶端不理解帶有mustunderstand =「1」的頭部,但我正在尋找一種方法來抑制此異常。
我看過其他問題,如this one,這似乎是接近我想要什麼,但我還沒有找到答案。任何建議/解決方案/等。非常感謝!