Freigeben über


Gewusst wie: Angeben der Clientanmeldeinformationswerte

Wenn Sie Windows Communication Foundation (WCF) verwenden, können Sie angeben, wie ein Client für den Dienst authentifiziert wird. Sie können beispielsweise festlegen, dass der Client mit einem Zertifikat für den Dienst authentifiziert wird. In diesem Beispiel wird der Sicherheitsmodus wird auf "Transport" und der Clientanmeldeinformationstyp wird auf "Certificate" eingestellt.

Der Vorgang erfolgt in drei Schritten:

  1. Der Entwickler des Dienstes bestimmt den Anmeldeinformationstyp, den der Client angeben muss.
  2. Der Entwickler des Clients verwendet das ServiceModel Metadata Utility Tool (Svcutil.exe), um die Metadaten des Dienstes (Dienstclientcode und Konfigurationsdatei) abzufragen.
  3. Der Entwickler des Clients erstellt die Clientanwendung und stellt einen Anmeldeinformationswert im Code oder in der Konfiguration bereit, der mit dem Anmeldeinformationstyp (gemäß Metadaten) übereinstimmt.

Dienstcode

So legen Sie den Clientanmeldeinformationstyp für den Dienst im Code fest

  1. Fügen Sie dem Code die folgenden Verweise hinzu.

  2. Erstellen Sie eine Instanz einer Bindung. In diesem Beispiel wird der Wert NetTcpBinding verwendet.

  3. Legen Sie wie erforderlich den Sicherheitsmodus fest. In diesem Beispiel wird der Modus auf Transport festgelegt.

  4. Legen Sie wie erforderlich den ClientCredentialType auf eine Anmeldeinformation fest. In diesem Beispiel wird der Typ auf ein Zertifikat festgelegt.

  5. Erstellen Sie mit dem Diensttyp im Konstruktor eine Instanz von ServiceHost. Der Einfachheit halber wird der Code, der die Dienstschnittstelle und die Implementierung zeigt, hier nicht dargestellt.

  6. Legen Sie den Anmeldeinformationswert für den Dienst fest. In diesem Beispiel wird die SetCertificate-Methode der X509CertificateRecipientServiceCredential-Klasse verwendet.

So legen Sie den Clientanmeldeinformationstyp für den Dienst in der Konfiguration fest

  1. Fügen Sie dem <bindings>-Element eine entsprechende Bindung hinzu. In diesem Beispiel wird die Datei <netTcpBinding Element> verwendet.

  2. Fügen Sie der Bindung eine <security> of <netTcpBinding> hinzu. Achten Sie darauf, für das erforderliche name-Attribut einen geeigneten Wert festzulegen.

  3. Legen Sie für das mode-Attribut einen geeigneten Wert fest. In diesem Beispiel wird der Modus "Message" verwendet.

  4. Fügen Sie wie erforderlich ein Transport- oder Nachrichtenelement zur Sicherheitsbindung hinzu. In diesem Beispiel wird die Datei <message> element of <netTcpBinding> verwendet.

  5. Legen Sie das clientCredential-Attribut auf den gewünschten Anmeldeinformationstyp fest. In diesem Beispiel wird "Certificate" verwendet.

    <bindings>
      <netTcpBinding>
        <binding name="TcpBindingWithCredential">
          <security mode="Message">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    
  6. Wenn Sie das Endpunktelement erstellen, verwenden Sie den bindingConfiguration-Attributswert, um die Bindungskonfiguration wie im folgenden Code dargestellt festzulegen.

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

Clientcode

Die folgenden Vorgänge zeigen, wie Sie den Clientanmeldeinformationswert für den Client im Code und in der Konfiguration festlegen können. Dabei wird davon ausgegangen, dass Sie das ServiceModel Metadata Utility Tool (Svcutil.exe) verwendet haben, um die Metadaten (Code und Konfiguration) vom Dienst zurückzugeben. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Windows Communication Foundation-Clients.

So legen Sie den Clientanmeldeinformationswert für den Client im Code fest

  1. Verwenden Sie das ServiceModel Metadata Utility Tool (Svcutil.exe), um den Code und die Konfiguration aus dem Dienst zu generieren.

  2. Erstellen Sie mit dem generierten Code eine Instanz des WCF-Clients.

  3. Legen Sie für die Clientklasse die ClientCredentials-Eigenschaft der ClientBase-Klasse auf einen geeigneten Wert fest. In diesem Beispiel wird die Eigenschaft auf ein X.509-Zertifikat mit der SetCertificate-Methode der X509CertificateInitiatorClientCredential-Klasse festgelegt.

    Sie können jede beliebige Enumeration der X509FindType-Klasse verwenden. Der Betreffname wird hier verwendet, für den Fall, dass das Zertifikat (aufgrund des Ablaufdatums) geändert wird. Anhand des Betreffnamens kann die Infrastruktur das Zertifikat wieder suchen.

So legen Sie den Clientanmeldeinformationswert für den Client in der Konfiguration fest

  1. Fügen Sie dem <behaviors>-Element ein <behavior> of <endpointBehaviors>-Element hinzu.

  2. Fügen Sie dem <behaviors>-Element ein <serviceCredentials>-Element hinzu. Achten Sie darauf, für das erforderliche name-Attribut einen geeigneten Wert festzulegen.

  3. Fügen Sie dem <clientCredentials>-Element ein <clientCertificate> of <serviceCredentials>-Element hinzu.

  4. Legen Sie für die folgenden Attribute geeignete Werte fest: storeLocation, storeName, x509FindType und findValue, wie im folgenden Code dargestellt. Weitere Informationen zu Zertifikaten finden Sie unter Verwenden von Zertifikaten.

    <behaviors>
       <endpointBehaviors>
          <behavior name="endpointCredential">
            <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. Das Endpunktelement ist dem <client>-Element untergeordnet. Geben Sie auch den Namen der Bindungskonfiguration an, indem Sie das bindingConfiguration-Attribut auf die Bindung für den Client festlegen. Wenn Sie eine generierte Konfigurationsdatei verwenden, wird der Name der Bindung automatisch erstellt. In diesem Beispiel lautet der Name "tcpBindingWithCredential".

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

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines Windows Communication Foundation-Clients

Referenz

NetTcpBinding
SetCertificate
X509CertificateRecipientServiceCredential
ClientBase
X509CertificateInitiatorClientCredential

Konzepte

Programmieren der WCF-Sicherheit
Wählen eines Typs von Anmeldeinformationen
Verwenden von Zertifikaten

Weitere Ressourcen

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