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
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).
Membuka file konfigurasi XML. Jika Anda menggunakan alat Svcutil.exe, nama default file adalah Output.config.
Temukan elemen <keamanan> dengan atribut mode (<mode keamanan =
MessageOrTransport
> di manaMessageOrTransport
diatur ke salah satu mode keamanan.Temukan elemen turunan yang cocok dengan nilai mode. Misalnya, jika mode diatur ke Pesan, temukan elemen <pesan> yang terkandung dalam elemen <keamanan>.
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
Gunakan Alat Utilitas Metadata ServiceModel (Svcutil.exe) untuk menghasilkan kode dan konfigurasi dari layanan.
Buat instans klien WCF menggunakan kode yang dihasilkan.
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
Tambahkan elemen <perilaku> ke elemen <perilaku>.
Tambahkan elemen <clientCredentials> ke elemen <perilaku>. Pastikan untuk mengatur atribut
name
yang diperlukan ke nilai yang sesuai.Tambahkan elemen <clientCertificate> ke elemen <clientCredentials>.
Atur atribut berikut ke nilai yang sesuai:
storeLocation
,storeName
,x509FindType
, danfindValue
, 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>
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 atributbindingConfiguration
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
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- Memprogram Keamanan WCF
- Memilih Jenis Kredensial
- Alat Utilitas Metadata ServiceModel (Svcutil.exe)
- Bekerja dengan Sertifikat
- Cara: Membuat Klien
- <netTcpBinding>
- <security>
- <message>
- <perilaku>
- <behaviors>
- <clientCertificate>
- <clientCredentials>