Procedura: impostare la modalità di sicurezza

Per la sicurezza Windows Communication Foundation (WCF) sono disponibili tre modalità di sicurezza comuni che si trovano nella maggior parte delle associazioni predefinite: trasporto, messaggio e "trasporto con credenziali messaggio". Esistono inoltre due modalità aggiuntive disponibili soltanto in due associazioni specifiche: la modalità "Solo credenziale a livello di trasporto" ("TransportCredentialOnly") dell'associazione BasicHttpBinding e la modalità "Entrambi" ("Both") dell'associazione NetMsmqBinding. Tuttavia, questo argomento descrive solo le tre modalità di sicurezza generali, ovvero: Transport, Message e TransportWithMessageCredential.

Si noti che non tutte le associazioni predefinite supportano queste modalità. Questo argomento descrive come utilizzare le classi WSHttpBinding e NetTcpBinding per impostare la modalità, sia a livello di programmazione sia in configurazione.

Per altre informazioni, vedere sicurezza WCF, vedere Panoramica della sicurezza, protezione dei servizie protezione di servizi e client. Per ulteriori informazioni sulla modalità trasporto e il messaggio, vedere sicurezza del trasporto e sicurezza dei messaggi.

Per impostare la modalità di sicurezza in codice

  1. Creare un'istanza della classe di associazione in uso. Per un elenco di associazioni predefinite, vedere associazioni fornite dal sistema. In questo esempio viene creata un'istanza della classe WSHttpBinding

  2. Impostare la proprietà Mode dell'oggetto restituito dalla proprietà Security.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    

    In alternativa, impostare la modalità su "Message", come mostrato nel codice seguente.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    

    In alternativa, impostare la modalità su "TransportWithMessageCredential", come mostrato nel codice seguente.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.TransportWithMessageCredential
    
  3. La modalità può anche essere impostata nel costruttore dell'associazione, come mostrato nel codice seguente.

    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    
    Dim b As New WSHttpBinding(SecurityMode.Message)
    

Impostazione della proprietà ClientCredentialType

L'impostazione della modalità su uno dei tre valori determina il valore su cui impostare la proprietà che specifica il tipo di credenziale client, ovvero ClientCredentialType. Ad esempio, se si utilizza la classe WSHttpBinding e si imposta la modalità su Transport, occorre impostare la proprietà ClientCredentialType della classe HttpTransportSecurity su un valore appropriato.

Per impostare la proprietà ClientCredentialType quando si imposta la modalità "Transport"

  1. Creare un'istanza dell'associazione.

  2. Impostare la proprietà Mode su Transport.

  3. Impostare la proprietà ClientCredential su un valore appropriato. Nell'esempio di codice seguente la proprietà viene impostata su Windows.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
    

Per impostare la proprietà ClientCredentialType quando si imposta la modalità "Message"

  1. Creare un'istanza dell'associazione.

  2. Impostare la proprietà Mode su Message.

  3. Impostare la proprietà ClientCredential su un valore appropriato. Nell'esempio di codice seguente la proprietà viene impostata su Certificate.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    

Per impostare la modalità e la proprietà ClientCredentialType in configurazione

  1. Aggiungere un elemento di associazione appropriato all' <bindings> elemento del file di configurazione. Nell'esempio seguente viene aggiunto un <wsHttpBinding> elemento.

  2. Aggiungere un <binding> elemento e impostare il relativo name attributo su un valore appropriato.

  3. Aggiungere un elemento <security>``mode``Message``Transport.

  4. Se si imposta la modalità su Transport, aggiungere un elemento <transport> su un valore appropriato.

    Nell'esempio seguente, la modalità viene impostata su "Transport", quindi l'attributo clientCredentialType dell'elemento <transport> viene impostato su "Windows".

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" >
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    In alternativa, impostare la security mode su "Message" seguita da un elemento <"message">. In questo esempio l'attributo clientCredentialType viene impostato su "Certificate".

    <wsHttpBinding>
    <binding name="MessageSecurity">
        <security mode="Message" >
           <message clientCredentialType = "Certificate" />
        </security>
    </binding>
    </wsHttpBinding >
    

    L'utilizzo del valore TransportWithMessageCredential rappresenta un caso speciale e viene spiegato di seguito.

Utilizzo della modalità TransportWithMessageCredential

Quando si imposta la modalità di sicurezza su TransportWithMessageCredential, il trasporto determina il meccanismo di sicurezza a livello di trasporto effettivamente utilizzato. Ad esempio, il protocollo di trasporto HTTP utilizza il meccanismo Secure Sockets Layer (SSL) su HTTP (HTTPS). Pertanto, l'impostazione della proprietà ClientCredentialType di qualsiasi oggetto di sicurezza a livello di trasporto (ad esempio HttpTransportSecurity) viene ignorata. In altre parole, è possibile impostare solo la proprietà ClientCredentialType dell'oggetto di sicurezza a livello di messaggio (per l'associazione WSHttpBinding, tale proprietà può essere impostata solo per l'oggetto NonDualMessageSecurityOverHttp).

Per altre informazioni, vedere procedura: usare la sicurezza del trasporto e le credenziali del messaggio.

Vedere anche