Bagikan melalui


Transportasi WS dengan Kredensial Pesan

Sampel ini menunjukkan penggunaan keamanan transportasi SSL dalam kombinasi dengan kredensial klien yang dibawa dalam pesan. Sampel ini menggunakan pengikatan wsHttpBinding.

Secara default, pengikatan wsHttpBinding menyediakan komunikasi HTTP. Saat dikonfigurasi untuk keamanan transportasi, pengikatan mendukung komunikasi HTTPS. HTTPS memberikan perlindungan kerahasiaan dan integritas untuk pesan yang dikirimkan melalui kabel. Namun set mekanisme autentikasi yang dapat digunakan untuk mengautentikasi klien ke layanan terbatas pada apa yang didukung transportasi HTTPS. Windows Communication Foundation (WCF) menawarkan mode keamanan TransportWithMessageCredential yang dirancang untuk mengatasi keterbatasan ini. Ketika mode keamanan ini dikonfigurasi, keamanan transportasi digunakan untuk memberikan kerahasiaan dan integritas untuk pesan yang dikirimkan dan untuk melakukan autentikasi layanan. Namun, autentikasi klien dilakukan dengan memasukkan kredensial klien langsung ke dalam pesan. Ini memungkinkan Anda untuk menggunakan jenis kredensial apa pun yang didukung oleh mode keamanan pesan untuk autentikasi klien sambil menjaga manfaat performa mode keamanan transportasi.

Dalam sampel ini, jenis kredensial UserName digunakan untuk mengautentikasi klien ke layanan.

Sampel ini didasarkan pada Memulai yang mengimplementasikan layanan kalkulator. Pengikatan wsHttpBinding ditentukan dan dikonfigurasi dalam file konfigurasi aplikasi untuk klien dan layanan.

Catatan

Prosedur penyiapan dan petunjuk pembuatan untuk sampel ini terdapat di akhir topik ini.

Kode program dalam sampel nyaris identik dengan kode program layanan Memulai. Ada satu operasi tambahan yang disediakan oleh kontrak layanan - GetCallerIdentity. Operasi ini mengembalikan nama identitas pemanggil kepada pemanggil.

public string GetCallerIdentity()
{
    // Use ServiceSecurityContext.WindowsIdentity to get the name of the caller.
    return ServiceSecurityContext.Current.WindowsIdentity.Name;
}

Anda harus membuat sertifikat dan menetapkannya dengan menggunakan Wizard Sertifikat Server Web sebelum membangun dan menjalankan sampel. Definisi titik akhir dan definisi pengikatan dalam pengaturan file konfigurasi mengaktifkan mode keamanan TransportWithMessageCredential, seperti yang ditunjukkan dalam konfigurasi sampel berikut untuk klien.

<system.serviceModel>
  <client>
    <endpoint name=""
              address="https://localhost/servicemodelsamples/service.svc"
              binding="wsHttpBinding"
              bindingConfiguration="Binding1"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
  </client>

  <bindings>
    <wsHttpBinding>
      <!--
        This configuration defines the security mode as TransportWithMessageCredential.
        and the clientCredentialType as UserName.
        -->
      <binding name="Binding1">
        <security mode ="TransportWithMessageCredential">
          <message clientCredentialType="UserName" />
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>
</system.serviceModel>

Alamat yang ditentukan menggunakan skema https://. Konfigurasi pengikatan mengatur mode keamanan menjadi TransportWithMessageCredential. Mode keamanan yang sama harus ditentukan dalam file Web.config layanan.

Karena sertifikat yang digunakan dalam sampel ini adalah sertifikat uji yang dibuat dengan Makecert.exe, peringatan keamanan akan muncul saat Anda mencoba mengakses alamat https:, seperti https://localhost/servicemodelsamples/service.svc, dari browser Anda. Untuk memungkinkan klien WCF bekerja dengan sertifikat pengujian di tempat, beberapa kode tambahan telah ditambahkan ke klien untuk menekan pemberitahuan keamanan. Kode ini, dan kelas yang menyertainya, tidak diperlukan saat menggunakan sertifikat produksi.

// WARNING: This code is only needed for test certificates such as those created by makecert. It is
// not recommended for production code.
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");

Saat Anda menjalankan sampel, permintaan dan respons operasi ditampilkan di jendela konsol klien. Tekan ENTER di jendela klien untuk mematikan komputer klien.

Username authentication required.
Provide a valid machine or domain account. [domain\\user]
   Enter username:
YourDomainName\YourAccountName
   Enter password:
********
YourDomainName\YourAccountName
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Untuk menyiapkan, membangun, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan Satu Kali untuk Sampel Windows Communication Foundation.

  2. Pastikan Anda telah melakukan Petunjuk Penginstalan Sertifikat Server Internet Information Services (IIS).

  3. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti petunjuknya di Membangun Sampel WCF.

  4. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi pada Menjalankan Sampel WCF.