Condividi tramite


Procedura: specificare valori di credenziali client

Windows Communication Foundation (WCF) consente di specificare la modalità di autenticazione di un client nel servizio. È ad esempio possibile stabilire che il client venga autenticato nel servizio con un certificato. In questo esempio la modalità di protezione viene impostata su Trasporto e il tipo di credenziali client su Certificato.

Questo processo è composto da tre parti:

  1. Lo sviluppatore del servizio specifica il tipo di credenziale che il client deve fornire.
  2. Lo sviluppatore del client utilizza ServiceModel Metadata Utility Tool (Svcutil.exe) per ricercare i metadati del servizio (codice del client del servizio e file di configurazione).
  3. Lo sviluppatore del client crea l'applicazione client e fornisce un valore di credenziale, nel codice o nella configurazione, corrispondente al tipo di credenziale, come stabilito nei metadati.

Codice del servizio

Per specificare il tipo di credenziali client nel servizio nel codice

  1. Aggiungere i riferimenti seguenti al codice.

  2. Creare un'istanza di un'associazione. Nell'esempio viene utilizzato NetTcpBinding.

  3. Impostare la modalità di protezione, se necessario. In questo esempio la modalità viene impostata su Transport.

  4. Impostare ClientCredentialType su una credenziale, se necessario. In questo esempio il tipo è impostato su un certificato.

  5. Creare un'istanza della classe ServiceHost utilizzando il tipo di servizio nel costruttore. Per motivi di semplicità, il codice che genera l'interfaccia del servizio e la relativa implementazione non è illustrato qui.

  6. Impostare il valore delle credenziali per il servizio. In questo esempio viene utilizzato il metodo SetCertificate della classe X509CertificateRecipientServiceCredential.

Per specificare il tipo di credenziali client nel servizio nella configurazione

  1. Aggiungere un'associazione adatta all'elemento <bindings>. In questo esempio viene utilizzato <netTcpBinding Element>.

  2. Aggiungere un elemento <security> of <netTcpBinding> all'associazione. Avere cura di impostare l'attributo name obbligatorio su un valore appropriato.

  3. Impostare l'attributo mode su un valore appropriato. In questo esempio viene utilizzata la modalità "Message".

  4. In base alle esigenze aggiungere un trasporto o un elemento messaggio all'associazione di protezione. In questo esempio viene utilizzato <message> element of <netTcpBinding>.

  5. Impostare l'attributo clientCredential sul tipo di credenziale desiderato. Nell'esempio viene utilizzato "Certificate".

    <bindings>
      <netTcpBinding>
        <binding name="TcpBindingWithCredential">
          <security mode="Message">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    
  6. Quando si crea l'elemento endpoint, utilizzare il valore di attributo bindingConfiguration per specificare la configurazione di associazione, come illustrato nel codice seguente.

    <endpoint address="myEndpointAddress"
              binding="netTcpBinding"
              bindingConfiguration="TcpBindingWithCredential"
                 name="netTcpBinding_ICalculator"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
    

Codice client

Nelle procedure seguenti viene descritto come impostare il valore delle credenziali client sul client nel codice e nella configurazione. Si presuppone che sia stato utilizzato ServiceModel Metadata Utility Tool (Svcutil.exe) per ottenere i metadati (codice e configurazione) dal servizio. Per ulteriori informazioni, vedere Procedura: creare un client di Windows Communication Foundation.

Per specificare il valore delle credenziali client nel client nel codice

  1. Utilizzare ServiceModel Metadata Utility Tool (Svcutil.exe) per generare il codice e la configurazione dal servizio.

  2. Crea un'istanza del client WCF utilizzando il codice generato.

  3. Nella classe del client impostare la proprietà ClientCredentials della classe ClientBase su un valore appropriato. In questo esempio la proprietà viene impostata su un certificato X.509 utilizzando il metodo SetCertificate della classe X509CertificateInitiatorClientCredential.

    È possibile utilizzare qualsiasi enumerazione della classe X509FindType. Il nome del soggetto viene qui utilizzato nel caso in cui il certificato venga modificato (a causa di una data di scadenza). L'utilizzo del nome del soggetto consente all'infrastruttura di cercare nuovamente il certificato.

Per specificare il valore delle credenziali client nel client nella configurazione

  1. Aggiungere un elemento <behavior> of <endpointBehaviors> all'elemento <behaviors>.

  2. Aggiungere un elemento <serviceCredentials> all'elemento <behaviors>. Avere cura di impostare l'attributo name obbligatorio su un valore appropriato.

  3. Aggiungere un elemento <clientCertificate> of <serviceCredentials> all'elemento <clientCredentials>.

  4. Impostare gli attributi seguenti sui valori appropriati: storeLocation, storeName, x509FindType e findValue, come illustrato nel codice seguente. Per ulteriori informazioni sui certificati, vedere Utilizzo dei certificati.

    <behaviors>
       <endpointBehaviors>
          <behavior name="endpointCredential">
            <clientCredentials>
              <clientCertificate findValue="Contoso.com" 
                                 storeLocation="LocalMachine"
                                 storeName="TrustedPeople"
                                 x509FindType="FindBySubjectName" />
            </clientCredentials>
          </behavior>
       </endpointBehaviors>
    </behaviors>
    
  5. Quando si configura il client, specificare il comportamento impostando l'attributo behaviorConfiguration dell'elemento <endpoint>, come illustrato nel codice seguente. L'elemento endpoint è figlio dell'elemento <client>. Specificare inoltre il nome della configurazione dell'associazione impostando l'attributo bindingConfiguration sull'associazione per il client. Se si utilizza un file di configurazione generato, il nome dell'associazione viene generato automaticamente. In questo esempio il nome è "tcpBindingWithCredential".

    <client>
      <endpoint name =""
                address="net.tcp://contoso.com:8036/aloha"
                binding="netTcpBinding"
                bindingConfiguration="tcpBindingWithCredential"
                behaviorConfiguration="credentialBehavior" />
    </client>
    

Vedere anche

Attività

Procedura: creare un client di Windows Communication Foundation

Riferimenti

NetTcpBinding
SetCertificate
X509CertificateRecipientServiceCredential
ClientBase
X509CertificateInitiatorClientCredential

Concetti

Programmazione delle funzionalità di protezione di WCF
Selezione di un tipo di credenziale
Utilizzo dei certificati

Altre risorse

ServiceModel Metadata Utility Tool (Svcutil.exe)
<netTcpBinding>
<security> of <netTcpBinding>
<message> element of <netTcpBinding>
<behavior> of <endpointBehaviors>
<behaviors>
<clientCertificate> of <serviceCredentials>
<clientCredentials>