Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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>