Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Tramite Windows Communication Foundation (WCF), il servizio può specificare come un client viene autenticato nel servizio. Ad esempio, un servizio può stabilire che il client sia autenticato con un certificato.
Per determinare il tipo di credenziale client
Recuperare i metadati dall'endpoint dei metadati del servizio. I metadati sono in genere costituiti da due file: il codice client nel linguaggio di programmazione preferito (il valore predefinito è Visual C#) e un file di configurazione XML. Un modo per recuperare i metadati consiste nell'usare lo strumento Svcutil.exe per restituire il codice client e la configurazione client. Per altre informazioni, vedere Recupero di metadati e Utilità metadati ServiceModel (Svcutil.exe).
Aprire il file di configurazione XML. Se si usa lo strumento Svcutil.exe, il nome predefinito del file è Output.config.
Trovare l'elemento <di sicurezza> con l'attributo
mode(<modalità di sicurezza =MessageOrTransport> doveMessageOrTransportè impostato su una delle modalità di sicurezza.Trovare l'elemento figlio che corrisponde al valore della modalità. Ad esempio, se la modalità è impostata su Message, trovare l'elemento <messaggio> contenuto nell'elemento <di sicurezza> .
Prendere nota del valore assegnato all'attributo
clientCredentialType. Il valore effettivo dipende dalla modalità utilizzata, dal trasporto o dal messaggio.
Il codice XML seguente illustra la configurazione per un client che usa la sicurezza dei messaggi e richiede 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
Questo esempio imposta la modalità di sicurezza su Modalità trasporto e imposta il valore delle credenziali client su un certificato X.509. Le procedure seguenti illustrano come impostare il valore delle credenziali client nel client nel codice e nella configurazione. Ciò presuppone che sia stato usato lo strumento utilità metadati ServiceModel (Svcutil.exe) per restituire i metadati (codice e configurazione) dal servizio. Per altre informazioni, vedere Procedura: Creare un client.
Per specificare nel codice il valore delle credenziali del client
Usare lo strumento di utilità dei metadati ServiceModel (Svcutil.exe) per generare codice e configurazione dal servizio.
Creare un'istanza del client WCF usando il codice generato.
Nella classe client impostare la ClientCredentials proprietà della ClientBase<TChannel> classe su un valore appropriato. In questo esempio la proprietà viene impostata su un certificato X.509 usando il SetCertificate metodo della X509CertificateInitiatorClientCredential classe .
// 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(); }' 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È possibile usare qualsiasi enumerazione della X509FindType classe . Il nome del soggetto viene usato qui nel caso in cui il certificato venga modificato (a causa di una data di scadenza). L'uso del nome soggetto consente all'infrastruttura di trovare di nuovo il certificato.
Per specificare il valore delle credenziali client nel client nella configurazione
Aggiungere un <elemento di comportamento> all'elemento <behaviors> .
Aggiungere un elemento di <clientCredentials> all'elemento <behaviors>. Assicurarsi di impostare l'attributo obbligatorio
namesu un valore appropriato.Aggiungere un <elemento clientCertificate> all'elemento <clientCredentials> .
Impostare gli attributi seguenti sui valori appropriati:
storeLocation,storeName,x509FindTypeefindValue, come illustrato nel codice seguente. Per altre informazioni sui certificati, vedere Uso 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
behaviorConfigurationdell'elemento<endpoint>, come illustrato nel codice seguente. L'elemento endpoint è un elemento figlio dell'elemento <client> . Inoltre, specificare il nome della configurazione del binding impostando l'attributobindingConfigurationsul binding per il client. Se si usa 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
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- Programmazione della sicurezza WCF
- Selezione di un tipo di credenziale
- Utilità metadati ServiceModel (Svcutil.exe)
- Uso dei certificati
- Procedura: Creare un client
- <netTcpBinding>
- <sicurezza>
- <Messaggio>
- <comportamento>
- <Comportamenti>
- <certificato cliente>
- <clientCredentials>