2010-12-15 33 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消息