2012-03-03 12 views
5

Quindi sarò il primo ad ammettere che conosco poco degli internals WS-Security. Ho una fabbrica di servizi SOAP come di seguito. Quando si utilizza questo servizio con client .NET solo test interni (utilizzando la classe proxy .cs autogenerata via svcutil.exe + WSDL generato automaticamente) tutto va bene. Riesco a vedere le prime 4 sequenze di handshaking SOAP richiesta-risposta di sicurezza prima della 5a richiesta/risposta SOAP "reale" (crittografata). Capisco la sicurezza in generale, ma vorrei sapere i dettagli di questo specifico handshaking, suppongo che stiano eseguendo uno scambio di chiavi?SOAP 1.2 su SSL + autenticazione di base HTTP o WS-Security?

In ogni caso, in parte perché

  1. non so il titolo sottostante SOAP handshake (WS-Security)
  2. so HTTPS e autenticazione HTTP di base (e preferiscono la velocità del trasporto SSL vs per messaggio SOAP crypto/sign-verificare le operazioni)
  3. voglio assicurare le comunicazioni SOAP endpoint pur conservando la compatibilità con i client non NET

stavo pensando che dovrei fare scambiando SOAP su HTTPS + autenticazione di base HTTP. Così le domande bollire per

  1. sono scambi SOAP su HTTPS + autenticazione HTTP di base ok? o un raro abominio (= incubo interopatico!)?
  2. Followup to above: Come configurare la fabbrica di servizi in base alle impostazioni consigliate? Inutile dire, voglio stare miglia di distanza da autenticazione di Windows, che è privo di significato in un ambiente 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; 
        } 
    } 
    

risposta

5

Troverete SSL + Auth di base ad essere massicciamente più interoperabili di WS-Security.

Se stai solo facendo un'integrazione point-to-point, SSL sarebbe sicuramente la soluzione migliore, se hai un'integrazione multi-party e multi-party più complessa, potresti doverli risolvere con WS -Sicurezza.

+0

Grazie. Forse dovrei postare la seconda parte come una domanda separata, ma come potrei configurare il mio factory di servizi SOAP per fare SSL + Basic Auth? Soprattutto non è chiaro in che modo l'Auth di base dovrebbe sapere a quale file dB/XML eseguire la ricerca? Legare in qualche provider di appartenenza? Grazie! – DeepSpace101

+1

In genere SSL e autenticazione gestiti dal server Web anziché dal livello SOAP, ma non sono sicuri di WCF in particolare – superfell

Problemi correlati