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
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).
Otwórz plik konfiguracji XML. Jeśli używasz narzędzia Svcutil.exe, domyślną nazwą pliku jest Output.config.
Znajdź element zabezpieczeń> za pomocą atrybutu mode (<tryb zabezpieczeń =>
MessageOrTransport
gdzieMessageOrTransport
jest ustawiony na jeden z trybów zabezpieczeń.<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ń.>
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
Użyj narzędzia ServiceModel Metadata Tool (Svcutil.exe), aby wygenerować kod i konfigurację z usługi.
Utwórz wystąpienie klienta programu WCF przy użyciu wygenerowanego kodu.
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
Dodaj element zachowania> do <elementu behaviors>.<
Dodaj element clientCredentials> do <elementu behaviors>.< Pamiętaj, aby ustawić wymagany
name
atrybut na odpowiednią wartość.Dodaj element clientCertificate> do <elementu clientCredentials>.<
Ustaw następujące atrybuty na odpowiednie wartości:
storeLocation
, ,x509FindType
storeName
ifindValue
, 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>
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ącbindingConfiguration
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ż
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- Programowanie zabezpieczeń WCF
- Wybieranie typu poświadczeń
- Narzędzie do obsługi metadanych elementu ServiceModel (Svcutil.exe)
- Praca z certyfikatami
- Instrukcje: tworzenie klienta
- <Nettcpbinding>
- <Zabezpieczenia >
- <message>
- <Zachowanie>
- <Zachowania>
- <Clientcertificate>
- <Clientcredentials>