2012-03-03 74 views
5

所以我会第一个承认我对WS-Security内部知之甚少。我有一个SOAP服务工厂,如下所示。将此服务与内部仅测试.NET客户端(通过svcutil.exe +自动生成的WSDL使用自动生成的.cs代理类)一起使用时,一切正常。在第5个“实际”(加密的)SOAP请求/响应之前,我可以看到前4个安全SOAP请求 - 响应握手对。我理解一般的安全性,但希望我知道关于这个特定握手的细节 - 我猜他们正在进行密钥交换?SOAP 1.2 over SSL + HTTP基本身份验证或WS-Security?

不管怎么说,部分原因是因为

  1. 我不知道底层的SOAP安全握手(WS-Security的)
  2. 我知道HTTPS和HTTP基本认证(和喜欢SSL传输的速度VS每SOAP消息加密/签名,验证操作)
  3. 我要保护的SOAP端点通讯科,同时保留与非.NET客户端

我想我应该做的兼容性通过HTTPS + HTTP基本认证进行SOAP交换。 所以问题归结为

  1. 均通过HTTPS + HTTP基本身份验证确定SOAP交换?或者罕见的(= interop恶梦!)可憎?
  2. 跟进到以上:我将如何配置我的服务工厂到推荐的设置?不用说,我想留英里远从Windows身份验证这是在互联网环境下毫无意义......

    public class SoapServiceHostFactory : ServiceHostFactory 
    { 
        private Type serviceInterfaceType; 
    
        public SoapServiceHostFactory(Type serviceInterfaceType) 
        { 
         this.serviceInterfaceType = serviceInterfaceType; 
        } 
    
        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
        { 
         ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses); 
         ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>(); 
    
         // Enable metadata 
         if (smb == null) 
         { 
          smb = new ServiceMetadataBehavior(); 
          host.Description.Behaviors.Add(smb); 
         } 
         smb.HttpGetEnabled = true; 
    
         // Enable debugging for service 
         ServiceDebugBehavior sdb = host.Description.Behaviors.Find<ServiceDebugBehavior>(); 
         if (sdb == null) 
         { 
          sdb = new ServiceDebugBehavior(); 
          host.Description.Behaviors.Add(sdb); 
         } 
         sdb.IncludeExceptionDetailInFaults = true; 
    
         // SOAP Security configuration 
         WSHttpBinding myBinding = new WSHttpBinding(); 
         myBinding.Security.Mode = SecurityMode.Transport; 
    
         host.AddServiceEndpoint(serviceInterfaceType, myBinding, ""); 
         return host; 
        } 
    } 
    

回答

5

你会发现SSL +基本身份认证是大量比WS-Security的更好的互操作性。

如果您只是在进行点对点集成,那么SSL将是确定的途径,如果您有更复杂的多跳多方集成,那么您可能需要使用WS来强化它-安全。

+0

谢谢。也许我应该将第二部分作为一个单独的问题发布,但是如何将我的SOAP服务工厂配置为执行SSL +基本身份验证?尤其不清楚的是,基本认证将如何知道哪个dB/XML文件执行查找?绑定一些会员供应商?谢谢! – DeepSpace101 2012-03-03 22:17:47

+1

通常SSL和Auth由Web服务器而不是SOAP层处理,但不确定WCF是否具体 – superfell 2012-03-05 21:05:11