Anvisningar: Ange värden för klientautentiseringsuppgifter
Med Hjälp av Windows Communication Foundation (WCF) kan tjänsten ange hur en klient autentiseras för tjänsten. En tjänst kan till exempel ange att klienten ska autentiseras med ett certifikat.
Så här fastställer du klientens typ av autentiseringsuppgifter
Hämta metadata från tjänstens metadataslutpunkt. Metadata består vanligtvis av två filer: klientkoden på valfritt programmeringsspråk (standardvärdet är Visual C#) och en XML-konfigurationsfil. Ett sätt att hämta metadata är att använda verktyget Svcutil.exe för att returnera klientkoden och klientkonfigurationen. Mer information finns i Hämta metadata och ServiceModel Metadata Utility Tool (Svcutil.exe).
Öppna XML-konfigurationsfilen. Om du använder verktyget Svcutil.exe är standardnamnet för filen Output.config.
Leta reda på säkerhetselementet> med modeattributet(<säkerhetsläge =>
MessageOrTransport
varMessageOrTransport
är inställt på något av säkerhetslägena.<Leta reda på det underordnade element som matchar lägesvärdet. Om läget till exempel är inställt på Meddelande letar du reda på <meddelandeelementet> i< säkerhetselementet>.
Observera värdet som tilldelats attributet clientCredentialType . Det faktiska värdet beror på vilket läge som används, transport eller meddelande.
Följande XML-kod visar konfigurationen för en klient med hjälp av meddelandesäkerhet och kräver ett certifikat för att autentisera klienten.
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
Exempel: TCP-transportläge med certifikat som klientautentiseringsuppgifter
Det här exemplet anger säkerhetsläget till Transportläge och anger värdet för klientens autentiseringsuppgifter till ett X.509-certifikat. Följande procedurer visar hur du anger klientens värde för autentiseringsuppgifter på klienten i kod och konfiguration. Detta förutsätter att du har använt verktygsverktyget för ServiceModel-metadata (Svcutil.exe) för att returnera metadata (kod och konfiguration) från tjänsten. Mer information finns i Så här skapar du en klient.
Ange värdet för klientens autentiseringsuppgifter på klienten i koden
Använd verktyget ServiceModel Metadata Utility (Svcutil.exe) för att generera kod och konfiguration från tjänsten.
Skapa en instans av WCF-klienten med hjälp av den genererade koden.
I klientklassen ClientCredentials anger du egenskapen för ClientBase<TChannel> klassen till ett lämpligt värde. Det här exemplet anger egenskapen till ett X.509-certifikat med hjälp SetCertificate av -metoden för X509CertificateInitiatorClientCredential klassen.
// 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
Du kan använda någon av uppräkningarna i X509FindType klassen. Ämnesnamnet används här om certifikatet ändras (på grund av ett utgångsdatum). Med hjälp av ämnesnamnet kan infrastrukturen hitta certifikatet igen.
Så här anger du klientens autentiseringsvärde för klienten i konfigurationen
Lägg till ett beteendeelement> i <beteendeelementet>.<
Lägg till ett clientCredentials-element> i <beteendeelementet>.< Se till att ange det obligatoriska
name
attributet till ett lämpligt värde.Lägg till ett clientCertificate-element> i elementet< clientCredentials>.<
Ange följande attribut till lämpliga värden:
storeLocation
,storeName
,x509FindType
ochfindValue
, enligt följande kod. Mer information om certifikat finns i Arbeta med certifikat.<behaviors> <endpointBehaviors> <behavior name="endpointCredentialBehavior"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>
När du konfigurerar klienten anger du beteendet genom att ange
behaviorConfiguration
elementets<endpoint>
attribut, enligt följande kod. Slutpunktselementet är underordnat <klientelementet> . Ange också namnet på bindningskonfigurationen genom att angebindingConfiguration
attributet till bindningen för klienten. Om du använder en genererad konfigurationsfil genereras bindningens namn automatiskt. I det här exemplet är"tcpBindingWithCredential"
namnet .<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="endpointCredentialBehavior" /> </client>
Se även
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- Programmering av WCF-säkerhet
- Välja en typ av autentiseringsuppgifter
- Verktyg för ServiceModel-metadataverktyg (Svcutil.exe)
- Arbeta med certifikat
- Gör så här: Skapa en klient
- <netTcpBinding>
- <Säkerhet >
- <meddelande>
- <Beteende>
- <Beteenden>
- <clientCertificate>
- <clientCredentials>