Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit Windows Communication Foundation (WCF) kann der Dienst angeben, wie ein Client beim Dienst authentifiziert wird. Beispielsweise kann ein Dienst festlegen, dass der Client mit einem Zertifikat authentifiziert wird.
So bestimmen Sie den Clientanmeldeinformationstyp
Abrufen von Metadaten vom Metadatenendpunkt des Diensts. Die Metadaten bestehen in der Regel aus zwei Dateien: dem Clientcode in der Programmiersprache Ihrer Wahl (der Standardwert ist Visual C#) und eine XML-Konfigurationsdatei. Eine Möglichkeit zum Abrufen von Metadaten besteht darin, das Svcutil.exe Tool zum Zurückgeben des Clientcodes und der Clientkonfiguration zu verwenden. Weitere Informationen finden Sie unter Abrufen von Metadaten und ServiceModel Metadata Utility Tool (Svcutil.exe).
Öffnen Sie die XML-Konfigurationsdatei. Wenn Sie das tool Svcutil.exe verwenden, ist der Standardname der Datei Output.config.
Suchen Sie das <Sicherheitselement> mit dem
modeAttribut (<Sicherheitsmodus =MessageOrTransport> woMessageOrTransportauf einen der Sicherheitsmodi festgelegt ist.Suchen Sie das untergeordnete Element, das dem Moduswert entspricht. Wenn der Modus beispielsweise auf "Nachricht" festgelegt ist, suchen Sie das Nachrichtenelement<, das><im Sicherheitselement> enthalten ist.
Notieren Sie sich den dem
clientCredentialTypeAttribut zugewiesenen Wert. Der tatsächliche Wert hängt davon ab, welcher Modus, Transport oder Nachricht verwendet wird.
Der folgende XML-Code zeigt die Konfiguration für einen Client mithilfe der Nachrichtensicherheit und das Anfordern eines Zertifikats zur Authentifizierung des Clients.
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
Beispiel: TCP-Transportmodus mit Zertifikat als Clientanmeldeinformationen
In diesem Beispiel wird der Sicherheitsmodus auf den Transportmodus festgelegt und der Clientanmeldeinformationswert auf ein X.509-Zertifikat festgelegt. Die folgenden Verfahren veranschaulichen das Festlegen des Clientanmeldeinformationswerts auf dem Client in Code und Konfiguration. Dabei wird davon ausgegangen, dass Sie das ServiceModel Metadata Utility Tool (Svcutil.exe) verwendet haben, um die Metadaten (Code und Konfiguration) aus dem Dienst zurückzugeben. Weitere Informationen finden Sie unter How to: Create a Client.
Um den Client-Credentials-Wert im Code auf dem Client anzugeben
Verwenden Sie das ServiceModel Metadata Utility Tool (Svcutil.exe), um Code und Konfiguration aus dem Dienst zu generieren.
Erstellen Sie eine Instanz des WCF-Clients mithilfe des generierten Codes.
Legen Sie auf der Clientklasse die ClientCredentials Eigenschaft der ClientBase<TChannel> Klasse auf einen geeigneten Wert fest. In diesem Beispiel wird die Eigenschaft mithilfe der Methode SetCertificate der X509CertificateInitiatorClientCredential-Klasse auf ein X.509-Zertifikat festgelegt.
// 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 TrySie können eine der Enumerationen der X509FindType Klasse verwenden. Der Subjektname wird hier verwendet, falls das Zertifikat aufgrund eines Ablaufdatums geändert werden muss. Wenn Sie den Betreffnamen verwenden, kann die Infrastruktur das Zertifikat erneut finden.
Geben Sie in der Konfiguration des Clients den Wert der Anmeldeinformationen für den Client an.
Fügen Sie dem <Verhaltens-Element> ein <Verhalten-Element> hinzu.
Fügen Sie dem <behaviors>-Element ein <clientCredentials>-Element hinzu. Stellen Sie sicher, dass Sie das erforderliche
nameAttribut auf einen geeigneten Wert festlegen.Fügen Sie dem <ClientCredentials-Element> ein <clientCertificate-Element> hinzu.
Legen Sie die folgenden Attribute auf geeignete Werte fest:
storeLocation, ,storeName,x509FindTypeundfindValue, wie im folgenden Code dargestellt. Weitere Informationen zu Zertifikaten finden Sie unter Arbeiten mit Zertifikaten.<behaviors> <endpointBehaviors> <behavior name="endpointCredentialBehavior"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>Geben Sie beim Konfigurieren des Clients das Verhalten an, indem Sie das
behaviorConfigurationAttribut des<endpoint>Elements festlegen, wie im folgenden Code gezeigt. Das Endpunkt-Element ist ein untergeordnetes Element des <Client>-Elements. Geben Sie außerdem den Namen der Bindungskonfiguration an, indem Sie dasbindingConfigurationAttribut auf die Bindung für den Client festlegen. Wenn Sie eine generierte Konfigurationsdatei verwenden, wird der Name der Bindung automatisch generiert. In diesem Beispiel lautet der Name"tcpBindingWithCredential".<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="endpointCredentialBehavior" /> </client>
Siehe auch
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- Programmieren von WCF-Sicherheit
- Auswahl eines Anmeldedatentyps
- ServiceModel Metadata Utility Tool (Svcutil.exe)
- Arbeiten mit Zertifikaten
- So erstellen Sie einen Client
- <netTcpBinding>
- <Sicherheit>
- <Nachricht>
- <Benehmen>
- <verhaltensweisen>
- <Client-Zertifikat>
- <clientCredentials>