Dela via


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

  1. 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).

  2. Öppna XML-konfigurationsfilen. Om du använder verktyget Svcutil.exe är standardnamnet för filen Output.config.

  3. Leta reda på säkerhetselementet> med modeattributet(<säkerhetsläge =>MessageOrTransport var MessageOrTransport är inställt på något av säkerhetslägena.<

  4. 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>.

  5. 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

  1. Använd verktyget ServiceModel Metadata Utility (Svcutil.exe) för att generera kod och konfiguration från tjänsten.

  2. Skapa en instans av WCF-klienten med hjälp av den genererade koden.

  3. 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

  1. Lägg till ett beteendeelement> i <beteendeelementet>.<

  2. Lägg till ett clientCredentials-element> i <beteendeelementet>.< Se till att ange det obligatoriska name attributet till ett lämpligt värde.

  3. Lägg till ett clientCertificate-element> i elementet< clientCredentials>.<

  4. Ange följande attribut till lämpliga värden: storeLocation, storeName, x509FindTypeoch findValue, 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>
    
  5. 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 ange bindingConfiguration 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