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

标签 soap https ws-security

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

无论如何,部分原因是

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

  • 我在想我应该通过 HTTPS + HTTP 基本身份验证进行 SOAP 交换。 所以问题归结为
  • 通过 HTTPS + HTTP 基本身份验证进行 SOAP 交换可以吗?还是罕见的(=互操作噩梦!)可憎的?
  • 跟进上述内容:我如何将我的服务工厂配置为推荐的设置?不用说,我想远离在互联网环境中毫无意义的 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;
        }
    }
    
  • 最佳答案

    您会发现 SSL + 基本身份验证比 WS-Security 更具互操作性。

    如果您只是在进行点对点集成,那么 SSL 肯定是可行的方法,如果您有更复杂的多跳、多方集成,那么您可能需要使用 WS-Security 来解决这个问题。

    关于SOAP 1.2 通过 SSL + HTTP 基本身份验证还是 WS-Security?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9542604/

    相关文章:

    java - 通过 HTTP 的 SSO CAS 客户端

    ssl - AWS 负载均衡器始终将 443 路由到 8443

    https - 如何下载 protected 网页

    java - 使用 java 的客户端的 cxf 安全 header

    c# - 在 WCF/WIF 中如何合并来自两个不同客户端的自定义 sts token 的声明

    java - 使用 Java 调用 SOAP Web 服务时如何修复不可读的 XML 响应?

    web-services - 用于测试目的的 SOAP 服务器

    java - 如何使用 Axis2 获取请求和响应?

    java - 如何使用 Java Web 服务处理同一个信封中的多个 SOAP 请求?

    java - 使用 WS-SecurityPolicy 方法时,有没有办法添加 WSS4J 拦截器来签署 SOAP 请求?