Nasıl yapılır: İstemci Kimlik Bilgileri Değerlerini Belirtme

Hizmet, Windows Communication Foundation 'ı (WCF) kullanarak bir istemcinin hizmette kimlik doğrulamasının nasıl yapılacağını belirtebilir. Örneğin, bir hizmet istemcinin bir sertifikayla kimliğinin doğrulandığını belirtebilir.

İstemci kimlik bilgisi türünü belirlemek için

  1. Hizmetin meta veri uç noktasından meta verileri alın. Meta veriler genellikle iki dosyadan oluşur: seçtiğiniz programlama dilindeki istemci kodu (varsayılan değer Visual C#'dir) ve bir XML yapılandırma dosyası. Meta verileri almanın bir yolu, istemci kodunu ve istemci yapılandırmasını döndürmek için Svcutil.exe aracını kullanmaktır. Daha fazla bilgi için bkz . Meta Verileri Alma ve ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe).

  2. XML yapılandırma dosyasını açın. Svcutil.exe aracını kullanırsanız, dosyanın varsayılan adı Output.config'dir.

  3. mode özniteliğine (<güvenlik modu =>MessageOrTransport burada MessageOrTransport güvenlik> modlarından birine ayarlanmış) güvenlik öğesini bulun.<

  4. Mod değeriyle eşleşen alt öğeyi bulun. Örneğin, mod İleti olarak ayarlandıysa, güvenlik> öğesinde <bulunan ileti> öğesini bulun.<

  5. clientCredentialType özniteliğine atanan değeri not edin. Gerçek değer, hangi modun kullanıldığına, aktarıma veya iletiye bağlıdır.

Aşağıdaki XML kodu, ileti güvenliğini kullanan ve istemcinin kimliğini doğrulamak için sertifika gerektiren bir istemcinin yapılandırmasını gösterir.

<security mode="Message">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
        realm="" />
     <message clientCredentialType="Certificate" negotiateServiceCredential="true"
    algorithmSuite="Default" establishSecurityContext="true" />
</security>

Örnek: İstemci Kimlik Bilgisi Olarak Sertifika ile TCP Aktarım Modu

Bu örnek, güvenlik modunu Aktarım moduna ayarlar ve istemci kimlik bilgisi değerini bir X.509 sertifikasına ayarlar. Aşağıdaki yordamlarda, kod ve yapılandırmada istemcide istemci kimlik bilgisi değerinin nasıl ayarlanacağı gösterilmektedir. Bu, hizmetten meta verileri (kod ve yapılandırma) döndürmek için ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) kullandığınız varsayılır. Daha fazla bilgi için bkz . Nasıl yapılır: İstemci Oluşturma.

Kodda istemcide istemci kimlik bilgisi değerini belirtmek için

  1. Hizmetten kod ve yapılandırma oluşturmak için ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) kullanın.

  2. Oluşturulan kodu kullanarak WCF istemcisinin bir örneğini oluşturun.

  3. İstemci sınıfında, sınıfının özelliğini ClientBase<TChannel> uygun bir değere ayarlayınClientCredentials. Bu örnek, sınıfının yöntemini kullanarak SetCertificate özelliğini bir X.509 sertifikasına X509CertificateInitiatorClientCredential ayarlar.

    // 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
    

    sınıfının numaralandırmalarından herhangi birini X509FindType kullanabilirsiniz. Sertifikanın değiştirilmesi durumunda (son kullanma tarihi nedeniyle) konu adı burada kullanılır. Konu adını kullanmak altyapının sertifikayı yeniden bulmasına olanak tanır.

Yapılandırmada istemcide istemci kimlik bilgisi değerini belirtmek için

  1. behaviors>> öğesine <bir <davranış öğesi ekleyin.

  2. behaviors öğesine clientCredentials <> öğesi< ekleyin.> Gerekli name özniteliği uygun bir değere ayarladığınızdan emin olun.

  3. clientCredentials> öğesine <bir< clientCertificate> öğesi ekleyin.

  4. Aşağıdaki öznitelikleri, aşağıdaki kodda gösterildiği gibi uygun değerlere ayarlayın: storeLocation, storeNamex509FindType, ve findValue. Sertifikalar hakkında daha fazla bilgi için bkz . Sertifikalarla Çalışma.

    <behaviors>
       <endpointBehaviors>
          <behavior name="endpointCredentialBehavior">
            <clientCredentials>
              <clientCertificate findValue="Contoso.com"
                                 storeLocation="LocalMachine"
                                 storeName="TrustedPeople"
                                 x509FindType="FindBySubjectName" />
            </clientCredentials>
          </behavior>
       </endpointBehaviors>
    </behaviors>
    
  5. İstemciyi yapılandırırken, aşağıdaki kodda gösterildiği gibi öğesinin <endpoint> özniteliğini ayarlayarak behaviorConfiguration davranışı belirtin. Endpoint öğesi, istemci> öğesinin <alt öğesidir. Ayrıca, özniteliğini istemcinin bağlamasına ayarlayarak bindingConfiguration bağlama yapılandırmasının adını belirtin. Oluşturulan bir yapılandırma dosyası kullanıyorsanız, bağlamanın adı otomatik olarak oluşturulur. Bu örnekte adı şeklindedir "tcpBindingWithCredential".

    <client>
      <endpoint name =""
                address="net.tcp://contoso.com:8036/aloha"
                binding="netTcpBinding"
                bindingConfiguration="tcpBindingWithCredential"
                behaviorConfiguration="endpointCredentialBehavior" />
    </client>
    

Ayrıca bkz.