SOAP 1.2 over SSL + HTTP基本身份验证还是WS-Security?

时间:2012-03-03 01:37:48

标签: soap https ws-security

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

无论如何,部分是因为

  1. 我不知道底层的SOAP安全握手(WS-Security)
  2. 我知道HTTPS和HTTP基本身份验证(并且更喜欢SSL传输速度与每封邮件SOAP加密/签名验证操作的速度)
  3. 我希望保护SOAP端点通信,同时保留与非.NET客户端的兼容性
  4. 我在想我应该通过HTTPS + HTTP基本身份验证进行SOAP交换。 所以问题可以归结为

    1. 通过HTTPS + HTTP基本身份验证进行SOAP交换是否正常?或者罕见的(=互操作噩梦!)憎恶?
    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;
          }
      }
      

1 个答案:

答案 0 :(得分:5)

您会发现SSL + Basic Auth比WS-Security更具互操作性。

如果您只是进行点对点集成,那么SSL将是确定的方法,如果您有更复杂的多跳,多方集成,那么您可能需要使用WS-强制实施安全