Gewusst wie: Angeben der ClientanmeldeinformationswerteHow to: Specify Client Credential Values

Mithilfe von Windows Communication Foundation (WCF) kann der Dienst angeben, wie ein Client an den Dienst authentifiziert wird.Using Windows Communication Foundation (WCF), the service can specify how a client is authenticated to the service. Ein Dienst kann beispielsweise festlegen, dass der Client mit einem Zertifikat authentifiziert wird.For example, a service can stipulate that the client be authenticated with a certificate.

So bestimmen Sie den Typ der ClientanmeldeinformationenTo determine the client credential type

  1. Rufen Sie die Metadaten aus dem Metadatenendpunkt des Diensts ab.Retrieve metadata from the service's metadata endpoint. Die Metadaten umfassen in der Regel zwei Dateien: den Clientcode in der Programmiersprache Ihrer Wahl (die Standardeinstellung ist Visual C#) und eine XML-Konfigurationsdatei.The metadata typically consists of two files: the client code in the programming language of your choice (the default is Visual C#), and an XML configuration file. Eine Möglichkeit zum Abrufen der Metadaten ist, das Tool "Svcutil.exe" zu verwenden, um den Clientcode und die Clientkonfiguration zurückzugeben.One way to retrieve metadata is to use the Svcutil.exe tool to return the client code and client configuration. Weitere Informationen finden Sie unter Abrufen von Metadaten und ServiceModel Metadata Utility Tool (Svcutil.exe).For more information, see Retrieving Metadata and ServiceModel Metadata Utility Tool (Svcutil.exe).

  2. Öffnen Sie die XML-Konfigurationsdatei.Open the XML configuration file. Wenn Sie das Tool "Svcutil.exe" verwenden, lautet der Standardname der Datei "Output.config".If you use the Svcutil.exe tool, the default name of the file is Output.config.

  3. Suchen der <Sicherheit > Element mit dem Modus Attribut (< Sicherheitsmodus = MessageOrTransport > , in dem MessageOrTransport auf einen der Sicherheitsmodi festgelegt ist.Find the <security> element with the mode attribute (<security mode =MessageOrTransport> where MessageOrTransport is set to one of the security modes.

  4. Suchen Sie nach dem untergeordneten Element, das dem Moduswert entspricht.Find the child element that matches the mode value. Wenn der Modus festgelegt ist z. B. Nachricht, suchen die <Nachricht > in enthaltenen Elementen der <Sicherheit > Element.For example, if the mode is set to Message, find the <message> element contained in the <security> element.

  5. Beachten Sie den zugewiesenen Wert der ClientCredentialType Attribut.Note the value assigned to the clientCredentialType attribute. Der tatsächliche Wert hängt davon ab, welcher Modus verwendet wird: Transport oder Nachricht.The actual value depends on which mode is used, transport or message.

Der folgende XML-Code veranschaulicht die Konfiguration für einen Client, der die Nachrichtensicherheit verwendet und ein Zertifikat zum Authentifizieren des Clients erfordert.The following XML code shows configuration for a client using message security and requiring a certificate to authenticate the client.

<security mode="Message">  
    <transport clientCredentialType="Windows" proxyCredentialType="None"  
        realm="" />  
     <message clientCredentialType="Certificate" negotiateServiceCredential="true"  
    algorithmSuite="Default" establishSecurityContext="true" />  
</security>  

Beispiel: TCP-Transportmodus mit einem Zertifikat als ClientanmeldeinformationenExample: TCP Transport Mode with Certificate as Client Credential

In diesem Beispiel wird der Sicherheitsmodus auf "Transport" und der Clientanmeldeinformationswert auf ein X.509-Zertifikat festgelegt.This example sets the security mode to Transport mode and sets the client credential value to an X.509 certificate. Die folgenden Vorgänge zeigen, wie Sie den Clientanmeldeinformationswert für den Client im Code und in der Konfiguration festlegen können.The following procedures demonstrate how to set the client credential value on the client in code and configuration. Dabei wird vorausgesetzt, dass Sie verwendet haben, die ServiceModel Metadata Utility Tool (Svcutil.exe) die Metadaten (Code und Konfiguration) vom Dienst zurückgegeben.This assumes that you have used the ServiceModel Metadata Utility Tool (Svcutil.exe) to return the metadata (code and configuration) from the service. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines Clients.For more information, see How to: Create a Client.

So legen Sie den Clientanmeldeinformationswert für den Client im Code festTo specify the client credential value on the client in code

  1. Verwenden der ServiceModel Metadata Utility Tool (Svcutil.exe) zum Generieren von Code und die Konfiguration des Diensts.Use the ServiceModel Metadata Utility Tool (Svcutil.exe) to generate code and configuration from the service.

  2. Erstellen Sie eine Instanz des WCF-Clients, die mit dem generierten Code.Create an instance of the WCF client using the generated code.

  3. Legen Sie für die Clientklasse die ClientCredentials-Eigenschaft der ClientBase<TChannel>-Klasse auf einen geeigneten Wert fest.On the client class, set the ClientCredentials property of the ClientBase<TChannel> class to an appropriate value. In diesem Beispiel wird die Eigenschaft auf ein X.509-Zertifikat mit der SetCertificate-Methode der X509CertificateInitiatorClientCredential-Klasse festgelegt.This example sets the property to an X.509 certificate using the SetCertificate method of the X509CertificateInitiatorClientCredential class.

    // 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
    

    Sie können jede beliebige Enumeration der X509FindType-Klasse verwenden.You can use any of the enumerations of the X509FindType class. Der Betreffname wird hier verwendet, für den Fall, dass das Zertifikat (aufgrund des Ablaufdatums) geändert wird.The subject name is used here in case the certificate is changed (due to an expiration date). Anhand des Betreffnamens kann die Infrastruktur das Zertifikat wieder suchen.Using the subject name enables the infrastructure to find the certificate again.

So legen Sie den Clientanmeldeinformationswert für den Client in der Konfiguration festTo specify the client credential value on the client in configuration

  1. Hinzufügen einer <Verhalten > Element an der <Verhalten > Element.Add a <behavior> element to the <behaviors> element.

  2. Hinzufügen einer <ClientCredentials > Element an der <Verhalten > Element.Add a <clientCredentials> element to the <behaviors> element. Achten Sie darauf, für das erforderliche name-Attribut einen geeigneten Wert festzulegen.Be sure to set the required name attribute to an appropriate value.

  3. Hinzufügen einer <ClientCertificate > Element an der <ClientCredentials > Element.Add a <clientCertificate> element to the <clientCredentials> element.

  4. Legen Sie für die folgenden Attribute geeignete Werte fest: storeLocation, storeName, x509FindType und findValue, wie im folgenden Code dargestellt.Set the following attributes to appropriate values: storeLocation, storeName, x509FindType, and findValue, as shown in the following code. Weitere Informationen zu Zertifikaten finden Sie unter Arbeiten mit Zertifikaten.For more information about certificates, see Working with Certificates.

    <behaviors>  
       <endpointBehaviors>  
          <behavior name="endpointCredentialBehavior">  
            <clientCredentials>  
              <clientCertificate findValue="Contoso.com"   
                                 storeLocation="LocalMachine"  
                                 storeName="TrustedPeople"  
                                 x509FindType="FindBySubjectName" />  
            </clientCredentials>  
          </behavior>  
       </endpointBehaviors>  
    </behaviors>  
    
  5. Wenn Sie den Client konfigurieren, legen Sie das Verhalten fest, indem Sie das behaviorConfiguration-Attribut des <endpoint>-Elements festlegen, wie im folgenden Code dargestellt.When configuring the client, specify the behavior by setting the behaviorConfiguration attribute of the <endpoint> element, as shown in the following code. Das Element ist ein untergeordnetes Element von der <Client > Element.The endpoint element is a child of the <client> element. Geben Sie auch den Namen der Bindungskonfiguration an, indem Sie das bindingConfiguration-Attribut auf die Bindung für den Client festlegen.Also, specify the name of the binding configuration by setting the bindingConfiguration attribute to the binding for the client. Wenn Sie eine generierte Konfigurationsdatei verwenden, wird der Name der Bindung automatisch erstellt.If you are using a generated configuration file, the binding's name is automatically generated. In diesem Beispiel lautet der Name "tcpBindingWithCredential".In this example, the name is "tcpBindingWithCredential".

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

Siehe auchSee Also

NetTcpBinding
SetCertificate
X509CertificateRecipientServiceCredential
ClientBase<TChannel>
X509CertificateInitiatorClientCredential
Programmieren der WCF-SicherheitProgramming WCF Security
Ausählen eines AnmeldeinformationentypsSelecting a Credential Type
ServiceModel Metadata Utility-Tool (Svcutil.exe)ServiceModel Metadata Utility Tool (Svcutil.exe)
Arbeiten mit ZertifikatenWorking with Certificates
Vorgehensweise: Erstellen eines ClientsHow to: Create a Client
<netTcpBinding><netTcpBinding>
<security><security>
<message><message>
<behavior><behavior>
<behaviors><behaviors>
<ClientCertificate ><clientCertificate>
<clientCredentials><clientCredentials>