Bagikan melalui


Menambahkan Keamanan dan Keanggotaan ke Situs Halaman Web (Razor) ASP.NET

oleh Tom FitzMacken

Artikel ini menjelaskan cara mengamankan situs web ASP.NET Web Pages (Razor) sehingga beberapa halaman hanya tersedia untuk orang yang masuk. (Anda juga akan melihat cara membuat halaman yang dapat diakses siapa pun.)

Yang akan Anda pelajari:

  • Cara membuat situs web yang memiliki halaman pendaftaran dan halaman masuk sehingga untuk beberapa halaman Anda hanya dapat membatasi akses ke anggota.
  • Cara membuat halaman publik dan khusus anggota.
  • Cara menentukan peran, yang merupakan grup yang memiliki izin keamanan yang berbeda di situs Anda, dan cara menetapkan pengguna ke peran.
  • Cara menggunakan CAPTCHA untuk mencegah program otomatis (bot) membuat akun anggota.

Ini adalah fitur ASP.NET yang diperkenalkan dalam artikel:

  • Templat Situs Pemula WebMatrix.
  • Pembantu WebSecurity dan Roles kelas.
  • Pembantu ReCaptcha .

Versi perangkat lunak yang digunakan dalam tutorial

  • Halaman Web ASP.NET (Razor) 2
  • WebMatrix 3
  • Pustaka Pembantu Web ASP.NET

Anda dapat menyiapkan situs web Anda sehingga pengguna dapat masuk ke dalamnya — yaitu, sehingga situs mendukung keanggotaan. Ini dapat berguna karena berbagai alasan. Misalnya, situs Anda mungkin memiliki halaman yang seharusnya hanya tersedia untuk anggota. Dalam beberapa kasus, Anda mungkin mengharuskan pengguna untuk masuk untuk mengirimi Anda umpan balik atau meninggalkan komentar.

Bahkan jika situs web Anda mendukung keanggotaan, pengguna tidak selalu diharuskan untuk masuk sebelum mereka menggunakan beberapa halaman di situs. Pengguna yang tidak masuk dikenal sebagai pengguna anonim.

Pengguna dapat mendaftar di situs web Anda dan kemudian dapat masuk ke situs. Situs web memerlukan nama pengguna (alamat email) dan kata sandi untuk mengonfirmasi bahwa pengguna adalah siapa yang mereka klaim. Proses masuk dan mengonfirmasi identitas pengguna ini dikenal sebagai autentikasi.

Anda dapat menyiapkan keamanan dan keanggotaan dengan cara yang berbeda:

  • Jika Anda menggunakan WebMatrix, cara mudahnya adalah membuat sebagai situs baru berdasarkan templat Situs Pemula . Templat ini sudah dikonfigurasi untuk keamanan dan keanggotaan dan sudah memiliki halaman pendaftaran, halaman masuk, dan sebagainya.

    Situs yang dibuat oleh templat juga memiliki opsi untuk memungkinkan pengguna masuk menggunakan situs eksternal seperti Facebook, Google, atau Twitter.

  • Jika Anda ingin menambahkan keamanan ke situs yang sudah ada, atau jika Anda tidak ingin menggunakan templat Situs Pemula , Anda bisa membuat halaman pendaftaran Anda sendiri, halaman masuk, dan sebagainya.

Artikel ini berfokus pada opsi pertama - cara menambahkan keamanan dengan menggunakan templat Situs Pemula . Ini juga menyediakan beberapa informasi dasar tentang cara menerapkan keamanan Anda sendiri dan kemudian menyediakan tautan ke informasi lebih lanjut tentang cara melakukannya. Ada juga informasi tentang cara mengaktifkan login eksternal, yang dijelaskan secara lebih rinci dalam artikel terpisah.

Membuat Keamanan Situs Web Menggunakan Templat Situs Pemula

Di WebMatrix, Anda bisa menggunakan templat Situs Pemula untuk membuat situs web yang berisi berikut ini:

  • Database yang digunakan untuk menyimpan nama pengguna dan kata sandi untuk anggota Anda.
  • Halaman pendaftaran tempat pengguna anonim (baru) dapat mendaftar.
  • Halaman masuk dan keluar.
  • Halaman pemulihan dan reset kata sandi.

Prosedur berikut ini menjelaskan cara membuat situs dan mengonfigurasinya.

  1. Mulai WebMatrix dan di halaman Mulai Cepat , pilih Situs Dari Templat.

  2. Pilih templat Situs Pemula lalu klik OK. WebMatrix membuat situs baru.

  3. Di panel kiri, klik pemilih ruang kerja File .

  4. Di folder akar situs web Anda, buka file _AppStart.cshtml , yang merupakan file khusus yang digunakan untuk berisi pengaturan global. Ini berisi beberapa pernyataan yang dikomentari menggunakan // karakter:

    //WebMail.SmtpServer = "mailserver.example.com";
    //WebMail.EnableSsl = true;
    //WebMail.UserName = "username@example.com";
    //WebMail.Password = "your-password";
    //WebMail.From = "your-name-here@example.com";
    

    Pernyataan ini mengonfigurasi pembantu WebMail , yang dapat digunakan untuk mengirim email. Sistem keanggotaan dapat menggunakan email untuk mengirim pesan konfirmasi saat pengguna mendaftar atau ketika mereka ingin mengubah kata sandi mereka. (Misalnya, setelah pengguna mendaftar, mereka mendapatkan email yang menyertakan tautan yang dapat mereka klik untuk menyelesaikan proses pendaftaran.)

    Mengirim email memerlukan akses ke server SMTP, seperti yang dijelaskan dalam Menambahkan Email ke Situs Halaman Web ASP.NET. Anda akan menyimpan pengaturan email di file _AppStart.cshtml pusat ini sehingga Anda tidak perlu mengodekannya berulang kali ke setiap halaman yang dapat mengirim email. (Anda tidak perlu mengonfigurasi pengaturan SMTP untuk menyiapkan database pendaftaran; Anda hanya memerlukan pengaturan SMTP jika Anda ingin memvalidasi pengguna dari alias email mereka dan membiarkan pengguna mengatur ulang kata sandi yang terlupakan.)

  5. Batalkan komentar pernyataan dengan menghapus // dari di depan masing-masing pernyataan.

    Jika Anda tidak ingin menyiapkan konfirmasi email, Anda dapat melewati langkah ini dan langkah berikutnya. Jika nilai SMTP tidak diatur, akun baru segera tersedia tanpa email konfirmasi.

  6. Ubah pengaturan terkait email berikut dalam kode:

    • Atur WebMail.SmtpServer ke nama server SMTP yang dapat Anda akses.

    • Biarkan WebMail.EnableSsl diatur ke true. Pengaturan ini mengamankan kredensial yang dikirim ke server SMTP dengan mengenkripsinya.

    • Atur WebMail.UserName ke nama pengguna untuk akun server SMTP Anda.

    • Atur WebMail.Password ke kata sandi untuk akun server SMTP Anda.

    • Atur WebMail.From ke alamat email Anda sendiri. Ini adalah alamat email tempat pesan dikirim.

      Catatan

      Tips Untuk informasi tambahan tentang nilai untuk properti ini, lihat Mengonfigurasi Pengaturan Email dalam Menyesuaikan Perilaku Site-Wide untuk Halaman Web ASP.NET.

  7. Simpan dan tutup _AppStart.cshtml.

  8. Jalankan halaman Default.cshtml di browser.

    keanggotaan keamanan-2

    Catatan

    Jika Anda melihat kesalahan yang memberi tahu Anda bahwa properti harus berupa contoh ExtendedMembershipProvider, situs mungkin tidak dikonfigurasi untuk menggunakan sistem keanggotaan halaman web ASP.NET (SimpleMembership). Ini kadang-kadang dapat terjadi jika server penyedia hosting dikonfigurasi secara berbeda dari server lokal Anda. Untuk memperbaikinya, tambahkan elemen berikut ke file Web.config situs:

    <appSettings>
        <add key="enableSimpleMembership" value="true" />
    </appSettings>
    

    Tambahkan elemen ini sebagai turunan dari <configuration> elemen dan sebagai serekan <system.web> elemen.

  9. Di sudut kanan atas halaman, klik tautan Daftar. Halaman Register.cshtml ditampilkan.

  10. Masukkan nama pengguna dan kata sandi lalu klik Daftar.

    keanggotaan keamanan-3

    Saat Anda membuat situs web dari templat Situs Pemula , database bernama StarterSite.sdf dibuat di folder App_Data situs. Selama pendaftaran, informasi pengguna Anda ditambahkan ke database. Jika Anda mengatur nilai SMTP, pesan dikirim ke alamat email yang Anda gunakan sehingga Anda dapat menyelesaikan pendaftaran.

    keanggotaan keamanan-4

  11. Buka program email Anda dan temukan pesan, yang akan memiliki kode konfirmasi dan hyperlink ke situs.

  12. Klik hyperlink untuk mengaktifkan akun Anda. Hyperlink konfirmasi membuka halaman konfirmasi pendaftaran.

    keanggotaan keamanan-5

  13. Klik tautan Masuk , lalu masuk menggunakan akun yang Anda daftarkan.

    Setelah Anda masuk, tautan Masuk dan Daftar digantikan oleh tautan Keluar . Nama masuk Anda ditampilkan sebagai tautan. (Tautan ini memungkinkan Anda membuka halaman tempat Anda dapat mengubah kata sandi.)

    keanggotaan keamanan-6

    Catatan

    Secara default, ASP.NET halaman web mengirim kredensial ke server dalam teks yang jelas (sebagai teks yang dapat dibaca manusia). Situs produksi harus menggunakan HTTP aman (https://, juga dikenal sebagai lapisan soket aman atau SSL) untuk mengenkripsi informasi sensitif yang dipertukarkan dengan server. Anda dapat memerlukan pesan email untuk dikirim menggunakan SSL dengan mengatur WebMail.EnableSsl=true seperti pada contoh sebelumnya. Untuk informasi selengkapnya tentang SSL, lihat Mengamankan Komunikasi Web: Sertifikat, SSL, dan https://.

Fungsionalitas Keanggotaan Tambahan di Situs

Situs Anda berisi fungsionalitas lain yang memungkinkan pengguna mengelola akun mereka. Pengguna dapat melakukan hal berikut:

  • Ubah kata sandi mereka. Setelah masuk, mereka dapat mengklik nama pengguna (yang merupakan tautan). Ini membawa mereka ke halaman di mana mereka dapat membuat kata sandi baru (Account/ChangePassword.cshtml).
  • Pulihkan kata sandi yang terlupakan. Pada halaman masuk, ada tautan (Apakah Anda lupa kata sandi Anda?) yang membawa pengguna ke halaman (Akun/ForgotPassword.cshtml) tempat mereka dapat memasukkan alamat email. Situs mengirimi mereka pesan email yang memiliki tautan yang dapat mereka klik untuk mengatur kata sandi baru (Account/PasswordReset.cshtml).

Anda juga dapat mengizinkan pengguna juga dapat masuk menggunakan situs eksternal, seperti yang dijelaskan nanti.

Membuat Halaman Members-Only

Untuk saat ini, siapa pun dapat menelusuri ke halaman mana pun di situs web Anda. Tetapi Anda mungkin ingin memiliki halaman yang hanya tersedia untuk orang yang telah masuk (yaitu, kepada anggota). ASP.NET memungkinkan Anda membuat halaman yang hanya dapat diakses oleh anggota yang masuk. Biasanya, jika pengguna anonim mencoba mengakses halaman khusus anggota, Anda mengalihkannya ke halaman masuk.

Dalam prosedur ini, Anda akan membuat folder yang akan berisi halaman yang hanya tersedia untuk pengguna yang masuk.

  1. Di akar situs, buat folder baru. (Di pita, klik panah di bawah Baru lalu pilih Folder Baru.)

  2. Beri nama folder baru Anggota.

  3. Di dalam folder Anggota , buat halaman baru dan beri nama MembersInformation.cshtml.

  4. Ganti konten yang sudah ada dengan kode dan markup berikut:

    @{
        if (!WebSecurity.IsAuthenticated) {
            Response.Redirect("~/Account/Login?returnUrl="
                + Request.Url.LocalPath);
        }
        Layout = "~/_SiteLayout.cshtml";
        Page.Title = "Members Information";
    }
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8" />
        <title>Members Information</title>
      </head>
      <body>
        <p>You can only see this information if you've logged into the site.</p>
      </body>
    </html>
    

    Kode ini menguji IsAuthenticated properti WebSecurity objek , yang mengembalikan true jika pengguna telah masuk. Jika pengguna tidak masuk, kode akan memanggil Response.Redirect untuk mengirim pengguna ke halaman Login.cshtml di folder Akun .

    URL pengalihan menyertakan returnUrl nilai string kueri yang menggunakan Request.Url.LocalPath untuk mengatur jalur halaman saat ini. Jika Anda mengatur returnUrl nilai dalam string kueri seperti ini (dan jika URL yang dikembalikan adalah jalur lokal), halaman masuk akan mengembalikan pengguna ke halaman ini setelah mereka masuk.

    Kode ini juga mengatur halaman _SiteLayout.cshtml sebagai halaman tata letaknya. (Untuk informasi selengkapnya tentang halaman tata letak, lihat Membuat Tata Letak Konsisten di ASP.NET Situs Halaman Web.)

  5. Jalankan situs. Jika Anda masih masuk, klik tombol Keluar di bagian atas halaman.

  6. Di browser, minta halaman /Members/MembersInformation. Misalnya, URL mungkin terlihat seperti ini:

    http://localhost:38366/Members/MembersInformation

    (Nomor port (38366) mungkin akan berbeda di URL Anda.)

    Anda dialihkan ke halaman Login.cshtml , karena Anda tidak masuk.

  7. Masuk menggunakan akun yang Anda buat sebelumnya. Anda dialihkan kembali ke halaman MembersInformation . Karena Anda masuk, kali ini Anda melihat konten halaman.

Untuk mengamankan akses ke beberapa halaman, Anda dapat melakukan ini:

  • Tambahkan pemeriksaan keamanan ke setiap halaman.
  • Buat halaman _PageStart.cshtml di folder tempat Anda menyimpan halaman yang dilindungi, dan tambahkan pemeriksaan keamanan di sana. Halaman _PageStart.cshtml bertindak sebagai semacam halaman global untuk semua halaman dalam folder. Teknik ini dijelaskan secara lebih rinci dalam Menyesuaikan Perilaku Site-Wide untuk Halaman Web ASP.NET.

Membuat Keamanan untuk Grup Pengguna (Peran)

Jika situs Anda memiliki banyak anggota, tidak efisien untuk memeriksa izin untuk setiap pengguna satu per satu sebelum Anda membiarkan mereka melihat halaman. Sebagai gantinya, yang dapat Anda lakukan adalah membuat grup, atau peran, yang dimiliki oleh masing-masing anggota. Anda kemudian dapat memeriksa izin berdasarkan peran. Di bagian ini, Anda akan membuat peran "admin" lalu membuat halaman yang dapat diakses oleh pengguna yang berada (milik) peran tersebut.

Sistem keanggotaan ASP.NET disiapkan untuk mendukung peran. Namun, tidak seperti pendaftaran keanggotaan dan login, templat Situs Pemula tidak berisi halaman yang membantu Anda mengelola peran. (Mengelola peran adalah tugas administratif daripada tugas pengguna.) Namun, Anda dapat menambahkan grup langsung dalam database keanggotaan di WebMatrix.

  1. Di WebMatrix, klik pemilih ruang kerja Database .

  2. Di panel kiri, buka simpul StarterSite.sdf , buka simpul Tabel , lalu klik dua kali tabel webpages_Roles .

    keanggotaan keamanan-7

  3. Tambahkan peran bernama "admin". Bidang RoleId diisi secara otomatis. (Ini adalah kunci utama dan telah diatur menjadi bidang identifikasi, seperti yang dijelaskan dalam Pengantar Bekerja dengan Database di Situs Halaman Web ASP.NET.)

  4. Perhatikan apa nilainya untuk bidang RoleId . (Jika ini adalah peran pertama yang Anda tentukan, itu akan menjadi 1.)

    keanggotaan keamanan-8

  5. Tutup tabel webpages_Roles .

  6. Buka tabel UserProfile .

  7. Catat nilai UserId dari satu atau beberapa pengguna dalam tabel lalu tutup tabel.

  8. Buka tabel webpages_UserInRoles dan masukkan userID dan nilai RoleID ke dalam tabel. Misalnya, untuk menempatkan pengguna 2 ke dalam peran "admin", Anda akan memasukkan nilai-nilai ini:

    keanggotaan keamanan-9

  9. Tutup tabel webpages_UsersInRoles .

    Sekarang setelah Anda memiliki peran yang ditentukan, Anda dapat mengonfigurasi halaman yang dapat diakses oleh pengguna yang berada dalam peran tersebut.

  10. Di folder akar situs web, buat halaman baru bernama AdminError.cshtml dan ganti konten yang ada dengan kode berikut. Ini akan menjadi halaman tempat pengguna dialihkan jika mereka tidak diizinkan mengakses halaman.

    @{
        Layout = "~/_SiteLayout.cshtml";
        PageData["Title"] = "Admin-only Error";
    }
    <p>You must log in as an admin to access that page.</p>
    
  11. Di folder akar situs web, buat halaman baru bernama AdminOnly.cshtml dan ganti kode yang ada dengan kode berikut:

    @{
        Layout = "~/_SiteLayout.cshtml";
        PageData["Title"] = "Administrators only";
    }
    
    @if ( Roles.IsUserInRole("admin")) {
        <span> Welcome <b>@WebSecurity.CurrentUserName</b>! </span>
    }
    else {
         Response.Redirect("~/AdminError");
    }
    

    Metode Roles.IsUserInRole mengembalikan true jika pengguna saat ini adalah anggota peran yang ditentukan (dalam hal ini, peran "admin").

  12. Jalankan Default.cshtml di browser, tetapi jangan masuk. (Jika Anda sudah masuk, keluar.)

  13. Di bilah alamat browser, tambahkan AdminOnly di URL. (Dengan kata lain, minta file AdminOnly.cshtml .) Anda dialihkan ke halaman AdminError.cshtml , karena Saat ini Anda tidak masuk sebagai pengguna dalam peran "admin".

  14. Kembali ke Default.cshtml dan masuk sebagai pengguna yang Anda tambahkan ke peran "admin".

  15. Telusuri ke halaman AdminOnly.cshtml . Kali ini Anda melihat halaman.

Mencegah Program Otomatis Bergabung dengan Situs Web Anda

Halaman masuk tidak akan menghentikan program otomatis (kadang-kadang disebut sebagai robot web atau bot) agar tidak mendaftar ke situs web Anda. Prosedur ini menjelaskan cara mengaktifkan pengujian ReCaptcha untuk halaman pendaftaran.

/media/38777/ch16securitymembership-18.jpg

  1. Daftarkan situs web Anda dengan layanan ReCaptcha. Setelah menyelesaikan pendaftaran, Anda akan mendapatkan kunci umum dan kunci privat.

  2. Tambahkan Pustaka Pembantu Web ASP.NET ke situs web Anda seperti yang dijelaskan dalam Menginstal Pembantu di Situs Halaman Web ASP.NET, jika Anda belum melakukannya.

  3. Di folder Akun , buka file bernama Register.cshtml.

  4. Di kode di bagian atas halaman, temukan baris berikut dan batalkan komentar dengan menghapus // karakter komentar:

    if (!ReCaptcha.Validate("PRIVATE_KEY")) {
        ModelState.AddError("recaptcha", "Captcha response was not correct");
    }
    
  5. Ganti PRIVATE_KEY dengan kunci privat ReCaptcha Anda sendiri.

  6. Di markup halaman, hapus @* karakter dan *@ komentar dari sekitar baris berikut di markup halaman:

    @ReCaptcha.GetHtml("PUBLIC_KEY", theme: "white")
    @Html.ValidationMessage("recaptcha")
    
  7. Ganti PUBLIC_KEY dengan kunci Anda.

  8. Jika Anda belum menghapusnya, hapus <div> elemen yang berisi teks yang dimulai dengan "Untuk mengaktifkan verifikasi CAPTCHA ...". (Hapus seluruh <div> elemen dan isinya.)

  9. Jalankan Default.cshtml di browser. Jika Anda masuk ke situs, klik tautan Keluar .

  10. Klik tautan Daftar dan uji pendaftaran menggunakan tes CAPTCHA.

    keanggotaan keamanan-10

Untuk informasi selengkapnya tentang pembantu ReCaptcha , lihat Menggunakan CATPCHA untuk Mencegah Program Otomatis (Bot) Menggunakan Situs Web ASP.NET Anda.

Mengizinkan Pengguna Masuk Menggunakan Situs Eksternal

Templat Situs Pemula menyertakan kode dan markup yang memungkinkan pengguna masuk menggunakan Facebook, Windows Live, Twitter, Google, atau Yahoo. Secara default, fungsionalitas ini tidak diaktifkan. Prosedur umum untuk menggunakan mengizinkan pengguna masuk menggunakan penyedia eksternal ini adalah:

  • Tentukan situs eksternal mana yang ingin Anda dukung.
  • Jika diperlukan, buka situs tersebut dan siapkan aplikasi masuk. (Misalnya, Anda harus melakukan ini untuk mengizinkan login Facebook.)
  • Di situs Anda, konfigurasikan penyedia. Dalam kebanyakan kasus, Anda hanya perlu membatalkan komentar beberapa kode dalam file _AppStart.cshtml .
  • Tambahkan markup ke halaman pendaftaran yang memungkinkan orang menautkan ke situs eksternal untuk masuk. Anda biasanya dapat menyalin markup yang Anda butuhkan dan mengubah teks sedikit.

Anda dapat menemukan instruksi langkah demi langkah dalam topik Mengaktifkan Masuk dari Situs Eksternal di Situs Halaman Web ASP.NET.

Setelah pengguna masuk dari situs lain, pengguna kembali ke situs Anda dan mengaitkan login tersebut dengan situs Anda. Akibatnya, ini membuat entri keanggotaan di situs Anda untuk login eksternal pengguna. Ini memungkinkan Anda menggunakan fasilitas normal keanggotaan (seperti peran) dengan login eksternal.

Menambahkan Keamanan ke Situs Web yang Sudah Ada

Prosedur sebelumnya dalam artikel ini bergantung pada penggunaan templat Situs Pemula sebagai dasar untuk keamanan situs web. Jika Tidak praktis bagi Anda untuk memulai dari templat Situs Pemula atau menyalin halaman yang relevan dari situs berdasarkan templat tersebut, Anda dapat menerapkan jenis keamanan yang sama di situs Anda sendiri dengan mengodekannya sendiri. Anda membuat jenis halaman yang sama — pendaftaran, login, dan sebagainya — lalu menggunakan pembantu dan kelas untuk menyiapkan keanggotaan.

Proses dasar dijelaskan dalam posting blog CARA paling dasar untuk menerapkan keamanan ASP.NET Razor. Sebagian besar pekerjaan dilakukan menggunakan metode dan properti pembantu WebSecurity berikut:

Untuk mengelola peran, Anda dapat menggunakan kelas Peran dan Keanggotaan , seperti yang dijelaskan dalam entri blog.

Sumber Daya Tambahan