3

我们正在与之集成的供应商提供了一些 Web 服务功能......他们用 Java 开发了它,并且还给了我们一个示例客户端项目(Java),它显示了这些 Web 服务的使用情况。我们实际上想用 .NET 实现 Web 服务的消费/接口,但我们无法弄清楚安全性应该如何工作。

在他们的 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 世界中的上述代码中。

4

2 回答 2

0

如果你真的卡住了,你可以使用IKVM与他们的 Java 代码进行互操作。它基本上是一个托管在 .NET 中的 JVM。

于 2010-12-15T15:57:31.297 回答
-1

你需要设置肥皂标题......像这样:

<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 消息

于 2017-09-06T12:54:42.753 回答