2012-03-03 26 views
5

Así que seré el primero en admitir que sé muy poco de los elementos internos de WS-Security. Tengo una fábrica de servicio SOAP como a continuación. Cuando se utiliza este servicio con clientes internos .NET de solo prueba (utilizando la clase de proxy .cs autogenerada a través de svcutil.exe + WSDL autogenerado) todo está bien. Puedo ver los primeros 4 pares de handshaking de respuesta y solicitud SOAP de seguridad antes de la quinta solicitud/respuesta SOAP "real" (encriptada). Entiendo la seguridad en general, pero me gustaría saber los detalles sobre este apretón de manos específico. ¿Supongo que están realizando un intercambio de claves?SOAP 1.2 sobre SSL + autenticación básica HTTP o WS-Security?

De todos modos, en parte porque

  1. no sé el valor subyacente de SOAP apretón de manos (WS-Security)
  2. sé HTTPS y autenticación básica HTTP (y prefieren la velocidad de transporte SSL por vs cripto mensaje SOAP/Sign-verificar las operaciones)
  3. que quiere asegurar las comunicaciones de punto final de SOAP preservando al mismo tiempo la compatibilidad con clientes que no son de .NET

que estaba pensando que debería hacer ing intercambios SOAP a través de la autenticación básica HTTPS + HTTP. Así que las preguntas a hervir

  1. son intercambios SOAP a través de HTTPS + autenticación básica HTTP bien? o una abominación rara (¡pesadilla de interoperabilidad!)
  2. Seguimiento hasta por encima de: ¿Cómo configuro mi fábrica de servicio a la configuración recomendada? Huelga decir que me quiero quedar millas de distancia de la autenticación de Windows, que no tiene sentido en un entorno de Internet ...

    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; 
        } 
    } 
    

Respuesta

5

Usted encontrará SSL + autenticación básica para ser masivamente más interoperables de WS-Security.

Si solo está haciendo una integración punto a punto, SSL sería el camino a seguir, si tiene una integración multisalto y multipartita más compleja, entonces puede que tenga que esforzarse con WS -Seguridad.

+0

Gracias. Tal vez debería publicar la segunda parte como una pregunta separada, pero ¿cómo iba a configurar mi fábrica de servicios SOAP para hacer SSL + autenticación básica? Especialmente poco claro es cómo podría saber Authentic Basic para qué archivo dB/XML realizar la búsqueda? Empate a algún proveedor de membresía? ¡Gracias! – DeepSpace101

+1

Normalmente SSL y Auth y manejado por el servidor web en lugar de la capa SOAP, pero no estoy seguro acerca de WCF específicamente – superfell

Cuestiones relacionadas