Так что я буду первым, кто признает, что мало знаю о внутренностях WS-Security.У меня есть сервисная фабрика SOAP, как показано ниже.При использовании этой службы с внутренними .NET-клиентами только для тестирования (с использованием автоматически сгенерированного прокси-класса .cs через svcutil.exe + автоматически сгенерированный WSDL) все в порядке.Я вижу первые 4 пары квитирования запроса-ответа безопасности SOAP перед пятым «фактическим» (зашифрованным) запросом-ответом SOAP.Я понимаю безопасность в целом, но хотелось бы знать подробности об этом конкретном рукопожатии - я полагаю, они выполняют обмен ключами?
В любом случае, отчасти потому, что
- Я не знаю лежащего в основе подтверждения безопасности SOAP (WS-Security)
- Я знаю базовую аутентификацию HTTPS и HTTP (ипредпочитаю скорость транспорта SSL по сравнению с сообщением SOAP-операции шифрования / проверки знака)
- Я хочу защитить связь с конечной точкой SOAP, сохраняя совместимость с клиентами, не являющимися .NET
Я былдумая, что я должен делать обмены SOAP через HTTPS + HTTP базовая аутентификация. Итак, вопросы сводятся к
- Является ли обмен SOAP через HTTPS + базовая аутентификация HTTP нормально?или редкая (= кошмар взаимодействия!) мерзость?
Продолжение вышеупомянутого : Как мне настроить фабрику обслуживания на рекомендованные настройки?Само собой разумеется, я хочу держаться подальше от аутентификации 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;
}
}