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

Dee*_*101 5 https ws-security soap

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

无论如何,部分是因为

  1. 我不知道底层的SOAP安全握手(WS-Security)
  2. 我知道HTTPS和HTTP基本身份验证(并且更喜欢SSL传输的速度与每个消息SOAP加密/签名验证操作的速度)
  3. 我想保护SOAP端点通信,同时保留与非.NET客户端的兼容性

我以为我应该通过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;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

sup*_*ell 5

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

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