Procedura: specificare valori di credenziali client
Windows Communication Foundation (WCF) consente al servizio di specificare la modalità di autenticazione di un client nel servizio. Ad esempio, un servizio può stabilire che il client venga autenticato con un certificato.
Per determinare il tipo di credenziale client
Recuperare i metadati dall'endpoint dei metadati di servizio. I metadati sono in genere costituiti da due file: il codice client del linguaggio di programmazione selezionato (l'impostazione predefinita è Visual C#) e un file di configurazione XML. Un modo per recuperare i metadati consiste nell'utilizzare lo strumento Svcutil.exe per restituire il codice e la configurazione client. Per ulteriori informazioni, vedere Recupero dei metadati e Strumento ServiceModel Metadata Utility Tool (Svcutil.exe).
Aprire il file di configurazione XML. Se si utilizza lo strumento Svcutil.exe, il nome predefinito del file è Output.config.
Trovare l'elemento <security> con l'attributo mode (<security mode = MessageOrTransport**>** in cui MessageOrTransport è impostato su una delle modalità di sicurezza.
Trovare l'elemento figlio che corrisponda al valore della modalità. Ad esempio, se la modalità è impostata su Message, trovare l'elemento <message> contenuto nell'elemento <security>.
Notare il valore assegnato all'attributo clientCredentialType. Il valore effettivo dipende dalla modalità utilizzata, trasporto o messaggio.
Nel codice XML seguente viene mostrata la configurazione di un client per cui viene utilizzata la sicurezza dei messaggi e viene richiesto un certificato per autenticare il client.
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
Esempio: Modalità di trasporto TCP con certificato come credenziale client
In questo esempio la modalità di sicurezza viene impostata sulla modalità Trasporto e il valore delle credenziali client su un certificato X.509. 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 Strumento 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
Utilizzare Strumento ServiceModel Metadata Utility Tool (Svcutil.exe) per generare il codice e la configurazione dal servizio.
Crea un'istanza del client WCF utilizzando il codice generato.
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.
' Create a binding using Transport and a certificate. Dim b As New NetTcpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate ' Create an EndPointAddress. Dim ea As New EndpointAddress("net.tcp://localHost:8036/Calculator/MyCalculator") ' Create the client. Dim cc As New CalculatorClient(b, ea) ' Set the certificate for the client. cc.ClientCredentials.ClientCertificate.SetCertificate( _ StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cohowinery.com") Try cc.Open() ' Begin using the client. Console.WriteLine(cc.Divide(1001, 2)) cc.Close() Catch adExc As AddressAccessDeniedException Console.WriteLine(adExc.Message) Console.ReadLine() Catch exc As System.Exception Console.WriteLine(exc.Message) Console.ReadLine() End Try
// Create a binding using Transport and a certificate. NetTcpBinding b = new NetTcpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate; // Create an EndPointAddress. EndpointAddress ea = new EndpointAddress( "net.tcp://localHost:8036/Calculator/MyCalculator"); // Create the client. CalculatorClient cc = new CalculatorClient(b, ea); // Set the certificate for the client. cc.ClientCredentials.ClientCertificate.SetCertificate( StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cohowinery.com"); try { cc.Open(); // Begin using the client. Console.WriteLine(cc.Divide(1001, 2)); cc.Close(); } catch (AddressAccessDeniedException adExc) { Console.WriteLine(adExc.Message); Console.ReadLine(); } catch (System.Exception exc) { Console.WriteLine(exc.Message); Console.ReadLine(); }
È 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
Aggiungere un elemento <behavior> of <endpointBehaviors> all'elemento <behaviors>.
Aggiungere un elemento <clientCredentials> all'elemento <behaviors>. Avere cura di impostare l'attributo
name
obbligatorio su un valore appropriato.Aggiungere un elemento <clientCertificate> of <serviceCredentials> all'elemento <clientCredentials>.
Impostare gli attributi seguenti sui valori appropriati:
storeLocation
,storeName
,x509FindType
efindValue
, come illustrato nel codice seguente. Per ulteriori informazioni su certificati, vedere Utilizzo dei certificati.<behaviors> <endpointBehaviors> <behavior name="endpointCredentialBehavior"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>
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'attributobindingConfiguration
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="endpointCredentialBehavior" /> </client>
Vedere anche
Attività
Procedura: creare un client di Windows Communication Foundation
Riferimento
NetTcpBinding
SetCertificate
X509CertificateRecipientServiceCredential
ClientBase
X509CertificateInitiatorClientCredential
Concetti
Programmazione delle funzionalità di sicurezza di WCF
Selezione di un tipo di credenziale
Strumento ServiceModel Metadata Utility Tool (Svcutil.exe)
Utilizzo dei certificati
Altre risorse
<netTcpBinding>
<security> of <netTcpBinding>
<message> element of <netTcpBinding>
<behavior> of <endpointBehaviors>
<behaviors>
<clientCertificate> of <serviceCredentials>
<clientCredentials>