Bagikan melalui


Validasi keamanan

Sampel ServiceValidation menunjukkan cara menggunakan perilaku kustom untuk memvalidasi layanan di komputer untuk memastikan mereka memenuhi kriteria tertentu. Dalam sampel ini, layanan divalidasi oleh perilaku kustom dengan memindai melalui setiap titik akhir pada layanan dan memeriksa untuk melihat apakah layanan tersebut berisi elemen pengikatan yang aman. Sampel ini berdasarkan Memulai.

Catatan

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

Perilaku Kustom Validasi Titik Akhir

Dengan menambahkan kode pengguna ke metode Validate yang terkandung dalam antarmuka IServiceBehavior, perilaku kustom dapat diberikan ke layanan atau titik akhir untuk melakukan tindakan yang ditentukan pengguna. Kode berikut digunakan untuk mengulang setiap titik akhir yang terkandung dalam layanan, yang mencari melalui koleksi pengikatannya untuk pengikatan yang aman.

public void Validate(ServiceDescription serviceDescription,
                                       ServiceHostBase serviceHostBase)
{
    // Loop through each endpoint individually, gathering their
    // binding elements.
    foreach (ServiceEndpoint endpoint in serviceDescription.Endpoints)
    {
        secureElementFound = false;

        // Retrieve the endpoint's binding element collection.
        BindingElementCollection bindingElements =
            endpoint.Binding.CreateBindingElements();

        // Look to see if the binding elements collection contains any
        // secure binding elements. Transport, Asymmetric, and Symmetric
        // binding elements are all derived from SecurityBindingElement.
        if ((bindingElements.Find<SecurityBindingElement>() != null) || (bindingElements.Find<HttpsTransportBindingElement>() != null) || (bindingElements.Find<WindowsStreamSecurityBindingElement>() != null) || (bindingElements.Find<SslStreamSecurityBindingElement>() != null))
        {
            secureElementFound = true;
        }

    // Send a message to the system event viewer when an endpoint is deemed insecure.
    if (!secureElementFound)
        throw new Exception(System.DateTime.Now.ToString() + ": The endpoint \"" + endpoint.Name + "\" has no secure bindings.");
    }
}

Menambahkan kode berikut ke file Web.config menambahkan ekstensi perilaku serviceValidate untuk dikenali layanan.

<system.serviceModel>
    <extensions>
        <behaviorExtensions>
            <add name="endpointValidate" type="Microsoft.ServiceModel.Samples.EndpointValidateElement, endpointValidate, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
        </behaviorExtensions>
    </extensions>
    ...
</system.serviceModel>

Setelah ekstensi perilaku ditambahkan ke layanan, sekarang dimungkinkan untuk menambahkan perilaku endpointValidate ke daftar perilaku dalam file Web.config dan dengan demikian, ke layanan.

<behaviors>
    <serviceBehaviors>
        <behavior name="CalcServiceSEB1">
            <serviceMetadata httpGetEnabled="true" />
            <endpointValidate />
        </behavior>
    </serviceBehaviors>
</behaviors>

Perilaku dan ekstensinya yang ditambahkan ke file Web.config menerapkan perilaku ke layanan individual, sementara ketika ditambahkan ke file Machine.config menerapkan perilaku ke setiap layanan yang aktif di komputer.

Catatan

Saat menambahkan perilaku ke semua layanan, disarankan untuk mencadangkan file Machine.config sebelum membuat perubahan apa pun.

Sekarang jalankan klien yang disediakan di direktori client\bin sampel ini. Pengecualian dilemparkan dengan pesan berikut: "Layanan http://localhost/servicemodelsamples/service.svc yang diminta tidak dapat diaktifkan." Ini diharapkan karena titik akhir dianggap tidak aman oleh perilaku validasi titik akhir dan mencegah layanan dimulai. Perilaku ini juga menampilkan pengecualian internal yang menjelaskan titik akhir mana yang tidak aman dan menulis pesan ke sistem Pemantau Peristiwa di bawah sumber "System.ServiceModel 4.0.0.0" dan kategori "WebHost". Dimungkinkan juga untuk mengaktifkan pelacakan pada layanan dalam sampel ini. Memungkinkan pengguna untuk melihat pengecualian yang ditampilkan oleh perilaku validasi titik akhir dengan membuka jejak layanan yang dihasilkan menggunakan alat Penampil Jejak Layanan.

Menampilkan pesan pengecualian validasi titik akhir yang gagal di Pemantau Peristiwa

  1. Klik menu Mulai dan pilih Jalankan.

  2. Ketik eventvwr dan klik OK.

  3. Di jendela Pemantau Peristiwa, klik Aplikasi.

  4. Klik dua kali peristiwa "System.ServiceModel 4.0.0.0" yang baru ditambahkan di bawah kategori "WebHost" di jendela Aplikasi untuk melihat pesan titik akhir yang tidak aman.

Menyiapkan, membangun, dan menjalankan sampel

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

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

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

Lihat juga