Udostępnij za pośrednictwem


Instrukcje: Określanie wartości poświadczeń klienta

Za pomocą programu Windows Communication Foundation (WCF) usługa może określić sposób uwierzytelniania klienta w usłudze. Na przykład usługa może określać, że klient zostanie uwierzytelniony przy użyciu certyfikatu.

Aby określić typ poświadczeń klienta

  1. Pobieranie metadanych z punktu końcowego metadanych usługi. Metadane zwykle składają się z dwóch plików: kodu klienta w wybranym języku programowania (wartość domyślna to Visual C#) i plik konfiguracji XML. Jednym ze sposobów pobierania metadanych jest użycie narzędzia Svcutil.exe w celu zwrócenia kodu klienta i konfiguracji klienta. Aby uzyskać więcej informacji, zobacz Pobieranie metadanych i narzędzia metadanych ServiceModel (Svcutil.exe).

  2. Otwórz plik konfiguracji XML. Jeśli używasz narzędzia Svcutil.exe, domyślną nazwą pliku jest Output.config.

  3. Znajdź element zabezpieczeń> za pomocą atrybutu mode (<tryb zabezpieczeń =>MessageOrTransport gdzie MessageOrTransport jest ustawiony na jeden z trybów zabezpieczeń.<

  4. Znajdź element podrzędny zgodny z wartością trybu. Jeśli na przykład tryb jest ustawiony na Komunikat, znajdź element komunikatu <> zawarty w elemecie <zabezpieczeń.>

  5. Zanotuj wartość przypisaną do atrybutu clientCredentialType . Rzeczywista wartość zależy od używanego trybu, transportu lub komunikatu.

Poniższy kod XML przedstawia konfigurację klienta przy użyciu zabezpieczeń komunikatów i wymaga certyfikatu do uwierzytelniania klienta.

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

Przykład: tryb transportu TCP z certyfikatem jako poświadczenie klienta

W tym przykładzie ustawiono tryb zabezpieczeń na Tryb transportu i ustawia wartość poświadczeń klienta na certyfikat X.509. Poniższe procedury pokazują, jak ustawić wartość poświadczeń klienta na kliencie w kodzie i konfiguracji. Przyjęto założenie, że użyto narzędzia ServiceModel Metadata Tool (Svcutil.exe) w celu zwrócenia metadanych (kodu i konfiguracji) z usługi. Aby uzyskać więcej informacji, zobacz How to: Create a Client (Instrukcje: tworzenie klienta).

Aby określić wartość poświadczeń klienta na kliencie w kodzie

  1. Użyj narzędzia ServiceModel Metadata Tool (Svcutil.exe), aby wygenerować kod i konfigurację z usługi.

  2. Utwórz wystąpienie klienta programu WCF przy użyciu wygenerowanego kodu.

  3. W klasie klienta ustaw ClientCredentials właściwość ClientBase<TChannel> klasy na odpowiednią wartość. W tym przykładzie właściwość jest ustawiana na certyfikat X.509 przy użyciu SetCertificate metody X509CertificateInitiatorClientCredential klasy .

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

    Możesz użyć dowolnego z wyliczeń X509FindType klasy . Nazwa podmiotu jest używana w tym miejscu w przypadku zmiany certyfikatu (z powodu daty wygaśnięcia). Użycie nazwy podmiotu umożliwia infrastrukturze ponowne znalezienie certyfikatu.

Aby określić wartość poświadczeń klienta na kliencie w konfiguracji

  1. Dodaj element zachowania> do <elementu behaviors>.<

  2. Dodaj element clientCredentials> do <elementu behaviors>.< Pamiętaj, aby ustawić wymagany name atrybut na odpowiednią wartość.

  3. Dodaj element clientCertificate> do <elementu clientCredentials>.<

  4. Ustaw następujące atrybuty na odpowiednie wartości: storeLocation, , x509FindTypestoreNamei findValue, jak pokazano w poniższym kodzie. Aby uzyskać więcej informacji na temat certyfikatów, zobacz Praca z certyfikatami.

    <behaviors>
       <endpointBehaviors>
          <behavior name="endpointCredentialBehavior">
            <clientCredentials>
              <clientCertificate findValue="Contoso.com"
                                 storeLocation="LocalMachine"
                                 storeName="TrustedPeople"
                                 x509FindType="FindBySubjectName" />
            </clientCredentials>
          </behavior>
       </endpointBehaviors>
    </behaviors>
    
  5. Podczas konfigurowania klienta określ zachowanie, ustawiając behaviorConfiguration atrybut elementu <endpoint> , jak pokazano w poniższym kodzie. Element punktu końcowego jest elementem podrzędnym <elementu klienta> . Ponadto określ nazwę konfiguracji powiązania, ustawiając bindingConfiguration atrybut na powiązanie dla klienta. Jeśli używasz wygenerowanego pliku konfiguracji, nazwa powiązania jest generowana automatycznie. W tym przykładzie nazwa to "tcpBindingWithCredential".

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

Zobacz też