2010-12-15 53 views
3

我們正在整合的供應商提供了一些Web服務功能......他們用Java開發了它,並且給了我們一個示例客戶端項目(在Java中)顯示這些Web服務的消費。我們實際上想要用.NET來實現Web服務的消費/接口,但我們無法弄清楚安全性應該如何工作。從.NET調用Java WS - Java方式使用Apache Rampart,.NET等效

在他們的Java客戶端示例中,它們似乎使用了一種名爲「Apache Rampart」的東西。他們的代碼中,看起來像這樣:

public static void initSecurityPolicy(ServiceClient client) throws Exception 
{ 
    Options options = client.getOptions(); 
    options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, 
     loadPolicy("policy.xml")); 

    options.setUserName(USERID); 
    options.setPassword(PASSWD); 
    options.setTimeOutInMilliSeconds(READTIMEOUT); 
    client.engageModule("rampart"); 
} 

有人能幫助我什麼,我應該尋找,在.NET環境,要做到這相當於?目前,在我的.NET項目中,我可以很好地使用他們的WSDL,並且它生成的代理對象非常好,但是如果我嘗試運行/調用任何函數,它會告訴我「缺少SOAP頭」,並且我相信這是安全 - 有關。

他們還爲我提供了policy.xml文件。我是一名初學.NET程序員,我通常依靠VStudio生成的代理來處理任何與WS相關的編程,所以我不確定如何處理該policy.xml文件,也不知道他們做了什麼在.NET世界的上面的代碼中。

回答

0

如果你真的陷入困境,你可以使用IKVM與他們的Java代碼進行互操作。它基本上是.NET中託管的JVM。

-1

您需要設置SOAP頭......這樣的事情:

<soap:Header> 
    <wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:UsernameToken wsu:Id="UsernameToken-E2E367EC446B10BDA2150463848593046"> 
     <wsse:Username>User</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Pass</wsse:Password> 
     <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">/rHCse9+oW6b71t1+J3GPA==</wsse:Nonce> 
     <wsu:Created>2017-09-05T09:08:05.930Z</wsu:Created> 
     </wsse:UsernameToken> 
    </wsse:Security> 
</soap:Header> 

對於這一點,你需要找到如何設置UsernameToken在.NET的安全證書添加到SOAP消息