【发布时间】:2012-03-03 01:37:47
【问题描述】:
所以我将是第一个承认我对 WS-Security 内部知识知之甚少的人。我有一个 SOAP 服务工厂,如下所示。当将此服务与仅用于内部测试的 .NET 客户端(通过 svcutil.exe + 自动生成的 WSDL 使用自动生成的 .cs 代理类)一起使用时,一切都很好。我可以在第 5 个“实际”(加密)SOAP 请求/响应之前看到前 4 个安全 SOAP 请求-响应握手对。我总体上了解安全性,但希望我知道有关此特定握手的详细信息-我猜他们正在执行密钥交换?
无论如何,部分是因为
- 我不知道底层的 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; } }
【问题讨论】:
标签: soap https ws-security