Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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
Pobierz metadane z końcowego punktu usługi metadanych. 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ń> z atrybutem
mode(tryb zabezpieczeń=<)MessageOrTransport> gdzieMessageOrTransportjest 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 <komunikat> zawarty w elemencie <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 właściwość ClientCredentials klasy ClientBase<TChannel> na odpowiednią wartość. W tym przykładzie właściwość jest ustawiana na certyfikat X.509 przy użyciu metody SetCertificate klasy X509CertificateInitiatorClientCredential.
// 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 TryMoż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 <clientCredentials> do elementu <behaviors>. Pamiętaj, aby ustawić wymagany
nameatrybut na odpowiednią wartość.Ustaw następujące atrybuty na odpowiednie wartości:
storeLocation, ,storeNamex509FindTypeifindValue, 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 atrybut
behaviorConfigurationelementu<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ącbindingConfigurationatrybut 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 także
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- Programowanie zabezpieczeń programu WCF
- Wybieranie typu poświadczeń
- Narzędzie Użytkowe Metadanych ServiceModel (Svcutil.exe)
- Praca z certyfikatami
- Instrukcje: tworzenie klienta
- <netTcpBinding>
- <bezpieczeństwo>
- <Komunikat>
- <zachowanie>
- <Zachowania>
- <certyfikat klienta>
- <clientCredentials>