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 didasarkan pada Panduan Memulai.

Nota

Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.

Perilaku Kustom Validasi Titik Akhir

Dengan menambahkan kode pengguna ke Validate metode yang terkandung dalam IServiceBehavior antarmuka, perilaku kustom dapat diberikan ke layanan atau titik akhir untuk melakukan tindakan yang ditentukan pengguna. Kode berikut digunakan untuk melakukan iterasi pada setiap endpoint yang ada dalam layanan, yang mencari di dalam koleksi pengikatnya untuk pengikatan 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 serviceValidate ekstensi perilaku untuk dikenali oleh 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 endpointValidate perilaku 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.

Nota

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

Sekarang jalankan klien yang disediakan di direktori client\bin dari 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 melemparkan pengecualian internal yang menjelaskan titik akhir mana yang tidak aman dan menulis pesan ke Penampil Peristiwa sistem di bawah sumber "System.ServiceModel 4.0.0.0" dan kategori "WebHost". Dimungkinkan juga untuk mengaktifkan pelacakan pada layanan dalam sampel ini. Ini memungkinkan pengguna untuk melihat pengecualian yang dilemparkan oleh perilaku validasi titik akhir dengan membuka jejak layanan yang dihasilkan menggunakan alat Service Trace Viewer.

Menampilkan pesan pengecualian validasi titik akhir yang gagal di Penampil Peristiwa

  1. Klik menu Mulai dan pilih Jalankan.

  2. Ketik eventvwr dan klik OK.

  3. Di jendela Penampil Peristiwa, klik Aplikasi.

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

Menyiapkan, membangun, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.

  3. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi di Menjalankan Sampel Windows Communication Foundation.

Lihat juga