Cara: Menentukan Nilai Kredensial Klien

Menggunakan Windows Communication Foundation (WCF), layanan dapat menentukan bagaimana klien diautentikasi ke layanan. Misalnya, layanan dapat menetapkan bahwa klien diautentikasi dengan sertifikat.

Untuk menentukan jenis kredensial klien

  1. Ambil metadata dari titik akhir metadata layanan. Metadata biasanya terdiri dari dua file: kode klien dalam bahasa pemrograman pilihan Anda (defaultnya adalah Visual C#), dan file konfigurasi XML. Salah satu cara untuk mengambil metadata adalah dengan menggunakan alat Svcutil.exe untuk mengembalikan kode klien dan konfigurasi klien. Untuk informasi selengkapnya, lihat Mengambil Metadata dan Alat Utilitas Metadata ServiceModel (Svcutil.exe).

  2. Buka file konfigurasi XML. Jika Anda menggunakan alat Svcutil.exe, nama default file adalah Output.config.

  3. <Temukan elemen keamanan> dengan mode atribut (<mode keamanan =MessageOrTransport> di mana MessageOrTransport diatur ke salah satu mode keamanan.

  4. Temukan elemen turunan yang cocok dengan nilai mode. Misalnya, jika mode diatur ke Pesan, temukan <elemen pesan> yang terkandung dalam <elemen keamanan> .

  5. Perhatikan nilai yang ditetapkan ke atribut clientCredentialType. Nilai aktual tergantung pada mode mana yang digunakan, transportasi, atau pesan.

Kode XML berikut menunjukkan konfigurasi untuk klien yang menggunakan keamanan pesan dan memerlukan sertifikat untuk mengautentikasi klien.

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

Contoh: Mode Transportasi TCP dengan Sertifikat sebagai Kredensial Klien

Contoh ini mengatur mode keamanan ke mode Transportasi dan mengatur nilai kredensial klien ke sertifikat X.509. Prosedur berikut menunjukkan cara mengatur nilai kredensial klien pada klien dalam kode dan konfigurasi. Ini mengasumsikan bahwa Anda telah menggunakan Alat Utilitas Metadata ServiceModel (Svcutil.exe) untuk mengembalikan metadata (kode dan konfigurasi) dari layanan. Untuk informasi selengkapnya, lihat Cara: Membuat Klien.

Untuk menentukan nilai kredensial klien pada klien dalam kode

  1. Gunakan Alat Utilitas Metadata ServiceModel (Svcutil.exe) untuk menghasilkan kode dan konfigurasi dari layanan.

  2. Buat instans klien WCF menggunakan kode yang dihasilkan.

  3. Pada kelas klien, atur properti ClientCredentials dari kelas ClientBase<TChannel> ke nilai yang sesuai. Contoh ini mengatur properti ke sertifikat X.509 dengan menggunakan metode dari kelas SetCertificateX509CertificateInitiatorClientCredential.

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

    Anda dapat menggunakan salah satu enumerasi dari kelas X509FindType. Nama subjek digunakan di sini jika sertifikat diubah (karena tanggal kedaluwarsa). Menggunakan nama subjek memungkinkan infrastruktur untuk menemukan sertifikat lagi.

Untuk menentukan nilai kredensial klien pada klien dalam konfigurasi

  1. <Tambahkan elemen perilaku> ke <elemen perilaku>.

  2. <Tambahkan elemen clientCredentials> ke <elemen perilaku>. Pastikan untuk mengatur atribut yang diperlukan name ke nilai yang sesuai.

  3. <Tambahkan elemen clientCertificate> ke <elemen clientCredentials>.

  4. Atur atribut berikut ke nilai yang sesuai: storeLocation, , storeNamex509FindType, dan findValue, seperti yang ditunjukkan dalam kode berikut. Untuk informasi selengkapnya tentang sertifikat, lihat Bekerja dengan Sertifikat.

    <behaviors>
       <endpointBehaviors>
          <behavior name="endpointCredentialBehavior">
            <clientCredentials>
              <clientCertificate findValue="Contoso.com"
                                 storeLocation="LocalMachine"
                                 storeName="TrustedPeople"
                                 x509FindType="FindBySubjectName" />
            </clientCredentials>
          </behavior>
       </endpointBehaviors>
    </behaviors>
    
  5. Saat mengonfigurasi klien, tentukan perilaku dengan mengatur behaviorConfiguration atribut <endpoint> elemen, seperti yang ditunjukkan dalam kode berikut. Elemen endpoint adalah turunan dari <elemen klien>. Selain itu, tentukan nama konfigurasi pengikatan dengan mengatur bindingConfiguration atribut ke pengikatan untuk klien. Jika Anda menggunakan file konfigurasi yang dihasilkan, nama pengikatan akan dibuat secara otomatis. Dalam contoh ini, namanya adalah "tcpBindingWithCredential".

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

Lihat juga