Bagikan melalui


Petunjuk: Menentukan Nilai Mandat Klien

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

Untuk menentukan jenis mandat 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. Membuka file konfigurasi XML. Jika Anda menggunakan alat Svcutil.exe, nama default file adalah Output.config.

  3. Temukan elemen <keamanan> dengan atribut mode (<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 Mandat Klien

Contoh ini mengatur mode keamanan ke mode Transportasi dan mengatur nilai mandat klien ke sertifikat X.509. Prosedur berikut menunjukkan cara mengatur nilai mandat klien pada klien dalam kode dan konfigurasi. Prosedur 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 mandat 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 kelas ClientBase<TChannel> ke nilai yang sesuai. Contoh ini mengatur properti ke sertifikat X.509 menggunakan metode SetCertificate kelas X509CertificateInitiatorClientCredential.

    // 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 kelas X509FindType. Nama subjek digunakan di sini jika sertifikat diubah (karena tanggal kedaluwarsa). Menggunakan nama subjek mengaktifkan infrastruktur untuk menemukan sertifikat lagi.

Untuk menentukan nilai mandat klien pada klien dalam konfigurasi

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

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

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

  4. Atur atribut berikut ke nilai yang sesuai: storeLocation, storeName,x509FindType, dan findValue, seperti yang ditunjukkan dalam kode berikut. Untuk informasi selengkapnya mengenai 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 atribut behaviorConfiguration dari elemen <endpoint>, seperti yang ditunjukkan dalam kode berikut. Elemen titik akhir adalah turunan dari elemen <klien>. Selain itu, tentukan nama konfigurasi pengikatan dengan mengatur atribut bindingConfiguration ke pengikatan untuk klien. Jika Anda menggunakan file konfigurasi yang dihasilkan, nama pengikatan akan dibuat secara otomatis. Dalam contoh ini, tautannya adalah "tcpBindingWithCredential".

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

Lihat juga