Procedure: Waarden voor clientreferenties opgeven
Met behulp van Windows Communication Foundation (WCF) kan de service opgeven hoe een client wordt geverifieerd bij de service. Een service kan bijvoorbeeld bepalen dat de client wordt geverifieerd met een certificaat.
Het clientreferentietype bepalen
Haal metagegevens op uit het metagegevenseindpunt van de service. De metagegevens bestaan doorgaans uit twee bestanden: de clientcode in de programmeertaal van uw keuze (de standaardwaarde is Visual C#) en een XML-configuratiebestand. Een manier om metagegevens op te halen is door het hulpprogramma Svcutil.exe te gebruiken om de clientcode en clientconfiguratie te retourneren. Zie Voor meer informatie het ophalen van metagegevens en servicemodel metagegevens hulpprogramma (Svcutil.exe).
Open het XML-configuratiebestand. Als u het hulpprogramma Svcutil.exe gebruikt, is de standaardnaam van het bestand Output.config.
Zoek het beveiligingselement> met het moduskenmerk (<beveiligingsmodus =>
MessageOrTransport
waarMessageOrTransport
is ingesteld op een van de beveiligingsmodi.<Zoek het onderliggende element dat overeenkomt met de moduswaarde. Als de modus bijvoorbeeld is ingesteld op Bericht, zoekt u het <berichtelement> in het< beveiligingselement>.
Noteer de waarde die is toegewezen aan het kenmerk clientCredentialType . De werkelijke waarde is afhankelijk van welke modus wordt gebruikt, transport of bericht.
De volgende XML-code toont de configuratie voor een client met behulp van berichtbeveiliging en het vereisen van een certificaat om de client te verifiëren.
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
Voorbeeld: TCP-transportmodus met certificaat als clientreferentie
In dit voorbeeld wordt de beveiligingsmodus ingesteld op de transportmodus en wordt de clientreferentiewaarde ingesteld op een X.509-certificaat. De volgende procedures laten zien hoe u de clientreferentiewaarde instelt op de client in code en configuratie. Hierbij wordt ervan uitgegaan dat u het Hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) hebt gebruikt om de metagegevens (code en configuratie) van de service te retourneren. Zie Een client maken voor meer informatie.
De clientreferentiewaarde op de client opgeven in code
Gebruik het hulpprogramma hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) om code en configuratie van de service te genereren.
Maak een exemplaar van de WCF-client met behulp van de gegenereerde code.
Stel in de clientklasse de ClientCredentials eigenschap van de ClientBase<TChannel> klasse in op een geschikte waarde. In dit voorbeeld wordt de eigenschap ingesteld op een X.509-certificaat met behulp van de SetCertificate methode van de X509CertificateInitiatorClientCredential klasse.
// 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
U kunt alle opsommingen van de X509FindType klasse gebruiken. De onderwerpnaam wordt hier gebruikt als het certificaat wordt gewijzigd (vanwege een vervaldatum). Met behulp van de onderwerpnaam kan de infrastructuur het certificaat opnieuw vinden.
De clientreferentiewaarde voor de client opgeven in de configuratie
Voeg een <gedragselement> toe aan het <gedragselement> .
Voeg een clientCredentials-element> toe aan het <gedragselement>.< Zorg ervoor dat u het vereiste
name
kenmerk instelt op een juiste waarde.Voeg een clientCertificate-element> toe aan het <element clientCredentials>.<
Stel de volgende kenmerken in op de juiste waarden:
storeLocation
,storeName
,x509FindType
enfindValue
, zoals wordt weergegeven in de volgende code. Zie Werken met certificaten voor meer informatie over certificaten.<behaviors> <endpointBehaviors> <behavior name="endpointCredentialBehavior"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>
Bij het configureren van de client geeft u het gedrag op door het
behaviorConfiguration
kenmerk van het<endpoint>
element in te stellen, zoals wordt weergegeven in de volgende code. Het eindpuntelement is een onderliggend element van het clientelement>.< Geef ook de naam van de bindingsconfiguratie op door hetbindingConfiguration
kenmerk in te stellen op de binding voor de client. Als u een gegenereerd configuratiebestand gebruikt, wordt de naam van de binding automatisch gegenereerd. In dit voorbeeld is"tcpBindingWithCredential"
de naam .<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="endpointCredentialBehavior" /> </client>
Zie ook
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- WCF-beveiliging programmeren
- Een referentietype selecteren
- Hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe)
- Werken met certificaten
- Procedure: Een client maken
- <netTcpBinding>
- <Beveiliging>
- <bericht>
- <Gedrag>
- <Gedrag>
- <clientCertificate>
- <clientCredentials>