【问题标题】:SOAP 1.2 over SSL + HTTP basic authentication or WS-Security?SOAP 1.2 over SSL + HTTP 基本身份验证或 WS-Security?
【发布时间】:2012-03-03 01:37:47
【问题描述】:

所以我将是第一个承认我对 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;
        }
    }
    

【问题讨论】:

    标签: soap https ws-security


    【解决方案1】:

    您会发现 SSL + Basic Auth 的互操作性比 WS-Security 大得多。

    如果您只是进行点对点集成,那么 SSL 肯定是要走的路,如果您有更复杂的多跳、多方集成,那么您可能需要使用 WS-安全性。

    【讨论】:

    • 谢谢。也许我应该将第二部分作为一个单独的问题发布,但是我将如何配置我的 SOAP 服务工厂来执行 SSL + 基本身份验证?特别不清楚的是基本身份验证如何知道要针对哪个 dB/XML 文件执行查找?与一些会员提供商联系?谢谢!
    • 通常是 SSL 和 Auth,由 Web 服务器而不是 SOAP 层处理,但不确定 WCF 的具体情况
    猜你喜欢
    • 2011-02-11
    • 2010-12-28
    • 1970-01-01
    • 2013-01-11
    • 2012-07-19
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多