Bagikan melalui


Memulihkan dan Mengubah Kata Sandi (VB)

oleh Scott Mitchell

Catatan

Sejak artikel ini ditulis, penyedia Keanggotaan ASP.NET telah digantikan oleh identitas ASP.NET. Kami sangat menyarankan untuk memperbarui aplikasi untuk menggunakan platform identitas ASP.NET daripada penyedia Keanggotaan yang ditampilkan pada saat artikel ini ditulis. ASP.NET Identity memiliki sejumlah keunggulan dibandingkan sistem Keanggotaan ASP.NET, termasuk :

  • Performa yang lebih baik
  • Peningkatan ekstensibilitas dan uji coba
  • Dukungan untuk OAuth, OpenID Connect, dan autentikasi dua faktor
  • Dukungan Identitas berbasis klaim
  • Interoperabilitas yang lebih baik dengan ASP.Net Core

ASP.NET mencakup dua kontrol Web untuk membantu memulihkan dan mengubah kata sandi. Kontrol PasswordRecovery memungkinkan pengunjung memulihkan kata sandinya yang hilang. Kontrol ChangePassword memungkinkan pengguna memperbarui kata sandinya. Seperti kontrol Web terkait Login lainnya yang telah kita lihat di seluruh seri tutorial ini, kontrol PasswordRecovery dan ChangePassword berfungsi dengan kerangka kerja Keanggotaan di belakang layar untuk mengatur ulang atau mengubah kata sandi pengguna.

Pendahuluan

Antara situs web untuk bank saya, perusahaan utilitas, perusahaan telepon, akun email, dan portal web yang dipersonalisasi, saya, seperti kebanyakan orang, memiliki puluhan kata sandi yang berbeda untuk diingat. Dengan begitu banyak kredensial untuk dihafal hari ini, tidak jarang orang melupakan kata sandi mereka. Untuk memperhitungkan hal ini, situs web yang menawarkan akun pengguna perlu menyertakan cara bagi pengguna untuk memulihkan kata sandinya. Proses ini biasanya melibatkan pembuatan kata sandi baru dan acak dan mengirimkannya ke alamat email pengguna pada file. Setelah menerima kata sandi baru mereka, sebagian besar pengguna kembali ke situs dan mengubah kata sandi mereka dari kata sandi yang dihasilkan secara acak menjadi kata sandi yang lebih mudah diingat.

ASP.NET mencakup dua kontrol Web untuk membantu memulihkan dan mengubah kata sandi. Kontrol PasswordRecovery memungkinkan pengunjung memulihkan kata sandinya yang hilang. Kontrol ChangePassword memungkinkan pengguna memperbarui kata sandinya. Seperti kontrol Web terkait Login lainnya yang telah kita lihat di seluruh seri tutorial ini, kontrol PasswordRecovery dan ChangePassword berfungsi dengan kerangka kerja Keanggotaan di belakang layar untuk mengatur ulang atau mengubah kata sandi pengguna.

Dalam tutorial ini kita akan memeriksa menggunakan dua kontrol ini. Kita juga akan melihat cara mengubah dan mereset kata sandi pengguna secara terprogram melalui MembershipUser kelas ChangePassword dan ResetPassword metode.

Langkah 1: Membantu Pengguna Memulihkan Kata Sandi yang Hilang

Semua situs web yang mendukung akun pengguna perlu memberi pengguna beberapa mekanisme untuk memulihkan kata sandi yang terlupakan. Kabar baiknya adalah bahwa menerapkan fungsionalitas tersebut di ASP.NET sangat mudah berkat kontrol Web PasswordRecovery. Kontrol PasswordRecovery merender antarmuka yang meminta nama pengguna mereka dan, jika diperlukan, jawaban atas pertanyaan keamanan mereka. Kemudian mengirim email ke pengguna kata sandi mereka.

Catatan

Karena pesan email dikirimkan melalui kawat dalam teks biasa, ada risiko keamanan yang terlibat dengan pengiriman kata sandi pengguna melalui email.

Kontrol PasswordRecovery terdiri dari tiga tampilan:

  • UserName - meminta pengunjung untuk nama pengguna mereka. Ini adalah tampilan awal.
  • Pertanyaan- menampilkan nama pengguna pengguna dan pertanyaan keamanan sebagai teks, bersama dengan TextBox bagi pengguna untuk memasukkan jawaban atas pertanyaan keamanannya.
  • Keberhasilan- menampilkan pesan yang memberi tahu pengguna bahwa kata sandinya telah dikirim melalui email.

Tampilan yang ditampilkan dan tindakan yang dilakukan oleh kontrol PasswordRecovery bergantung pada pengaturan konfigurasi Keanggotaan berikut:

  • RequiresQuestionAndAnswer
  • EnablePasswordRetrieval
  • EnablePasswordReset

Pengaturan Kerangka kerja RequiresQuestionAndAnswer keanggotaan menunjukkan apakah pengguna harus menentukan pertanyaan dan jawaban keamanan saat mendaftar untuk akun. Seperti yang kita bahas dalam tutorial Membuat Akun Pengguna, jika RequiresQuestionAndAnswer Benar (default) maka antarmuka CreateUserWizard mencakup kontrol TextBox untuk pertanyaan dan jawaban keamanan pengguna baru; jika RequiresQuestionAndAnswer Salah, tidak ada informasi seperti itu yang dikumpulkan. Demikian pula, jika RequiresQuestionAndAnswer True, kontrol PasswordRecovery menampilkan tampilan Pertanyaan setelah pengguna memasukkan nama pengguna mereka; kata sandi dipulihkan hanya jika pengguna memasukkan jawaban keamanan yang benar. Namun, jika RequiresQuestionAndAnswer salah, kontrol PasswordRecovery bergerak langsung dari tampilan UserName ke tampilan Berhasil.

Setelah pengguna memberikan nama penggunanya - atau nama pengguna dan jawaban keamanannya, jika RequiresQuestionAndAnswer Benar - PasswordRecovery mengirim email kepada pengguna kata sandinya. EnablePasswordRetrieval Jika opsi diatur ke True, maka pengguna akan mengirim kata sandi mereka saat ini melalui email. Jika diatur ke False dan EnablePasswordReset diatur ke True, maka kontrol PasswordRecovery menghasilkan kata sandi baru dan acak untuk pengguna, dan mengirim email kata sandi baru ini kepada mereka. Jika keduanya EnablePasswordRetrieval dan EnablePasswordReset Salah, kontrol PasswordRecovery melemparkan pengecualian.

Catatan

Ingat bahwa SqlMembershipProvider menyimpan kata sandi pengguna dalam salah satu dari tiga format: Hapus, Hashed (default), atau Terenkripsi. Mekanisme penyimpanan yang digunakan tergantung pada pengaturan konfigurasi Keanggotaan; aplikasi demo menggunakan format kata sandi Hashed. Saat menggunakan format EnablePasswordRetrieval kata sandi Hashed, opsi harus diatur ke False karena sistem tidak dapat menentukan kata sandi aktual pengguna dari versi hash yang disimpan dalam database.

Gambar 1 menggambarkan bagaimana antarmuka dan perilaku PasswordRecovery dipengaruhi oleh konfigurasi Keanggotaan.

RequiresQuestionAndAnswer, EnablePasswordRetrieval, dan EnablePasswordReset Memengaruhi Tampilan dan Perilaku kontrol PasswordRecovery

Gambar 1: , RequiresQuestionAndAnswer, EnablePasswordRetrievaldan EnablePasswordReset Pengaruhi Tampilan dan Perilaku kontrol PasswordRecovery (Klik untuk melihat gambar ukuran penuh)

Menggunakan Kontrol PasswordRecovery

Mari kita lihat menggunakan kontrol PasswordRecovery di halaman ASP.NET. Buka RecoverPassword.aspx dan seret dan letakkan kontrol PasswordRecovery dari Kotak Alat ke Perancang; atur ID ke RecoverPwd. Seperti kontrol Web Login dan CreateUserWizard, tampilan kontrol PasswordRecovery merender antarmuka komposit kaya yang mencakup Label, Kotak Teks, Tombol, dan kontrol validasi. Anda dapat menyesuaikan tampilan tampilan melalui properti gaya kontrol atau dengan mengonversi tampilan menjadi templat. Saya meninggalkan ini sebagai latihan untuk pembaca yang tertarik.

Ketika pengguna mengunjungi halaman ini, dia akan memasukkan nama penggunanya dan mengklik tombol Kirim. Karena kami telah mengatur properti ke RequiresQuestionAndAnswer True di pengaturan konfigurasi Keanggotaan kami, kontrol PasswordRecovery kemudian akan menampilkan tampilan Pertanyaan. Setelah pengguna memasukkan jawaban keamanan yang benar dan mengklik Kirim, kontrol PasswordRecovery akan memperbarui kata sandi pengguna ke kata sandi yang dihasilkan secara acak, dan mengirim kata sandi ini ke alamat email pada file. Semua ini dimungkinkan tanpa kita harus menulis satu baris kode!

Sebelum Anda menguji halaman ini, ada satu bagian konfigurasi akhir yang cenderung: kita perlu menentukan pengaturan pengiriman email di Web.config. Kontrol PasswordRecovery bergantung pada pengaturan ini untuk mengirim email.

Konfigurasi pengiriman email ditentukan melalui <system.net> elemen elemen<mailSettings> . <smtp> Gunakan elemen untuk menunjukkan metode pengiriman dan alamat Dari default. Markup berikut mengonfigurasi pengaturan email untuk menggunakan server SMTP jaringan bernama smtp.example.com pada port 25 dan dengan kredensial nama pengguna/kata sandi nama pengguna dan kata sandi.

Catatan

<system.net> adalah elemen turunan dari elemen akar <configuration> dan saudara kandung dari <system.web>. Oleh karena itu, jangan letakkan elemen dalam <system.net> <system.web> elemen ; sebagai gantinya, letakkan pada tingkat yang sama.

Selain menggunakan server SMTP di jaringan, Anda dapat menentukan direktori penjemputan di mana pesan email yang akan dikirim harus disetorkan.

Setelah Anda mengonfigurasi pengaturan SMTP, kunjungi RecoverPassword.aspx halaman melalui browser. Pertama coba masukkan nama pengguna yang tidak ada di penyimpanan pengguna. Seperti yang ditunjukkan Oleh Gambar 2, kontrol PasswordRecovery menampilkan pesan yang menunjukkan bahwa informasi pengguna tidak dapat diakses. Teks pesan dapat dikustomisasi melalui properti kontrolUserNameFailureText.

Pesan Kesalahan Ditampilkan jika Nama Pengguna Tidak Valid Dimasukkan

Gambar 2: Pesan Kesalahan Ditampilkan jika Nama Pengguna Tidak Valid Dimasukkan (Klik untuk melihat gambar ukuran penuh)

Sekarang masukkan nama pengguna. Gunakan nama pengguna akun dalam sistem dengan alamat email yang dapat Anda akses dan jawaban keamanannya Anda ketahui. Setelah memasukkan nama pengguna dan mengklik Kirim, kontrol PasswordRecovery menampilkan tampilan Pertanyaannya. Seperti halnya tampilan UserName, jika Anda memasukkan jawaban yang salah, kontrol PasswordRecovery menampilkan pesan kesalahan (lihat Gambar 3). QuestionFailureText Gunakan properti untuk menyesuaikan pesan kesalahan ini.

Pesan Kesalahan Ditampilkan jika Pengguna Memasukkan Jawaban Keamanan Tidak Valid

Gambar 3: Pesan Kesalahan Ditampilkan jika Pengguna Memasukkan Jawaban Keamanan Tidak Valid (Klik untuk melihat gambar ukuran penuh)

Terakhir, masukkan jawaban keamanan yang benar dan klik Kirim. Di balik layar, kontrol PasswordRecovery menghasilkan kata sandi acak, menetapkannya ke akun pengguna, mengirim email yang memberi tahu pengguna tentang kata sandi baru mereka (lihat Gambar 4), lalu menampilkan tampilan Keberhasilan.

Pengguna Dikirimi Email dengan Kata Sandi Barunya

Gambar 4: Pengguna Dikirimi Email dengan Kata Sandi Barunya (Klik untuk melihat gambar ukuran penuh)

Menyesuaikan Email

Email default yang dikirim oleh kontrol PasswordRecovery agak kusam (lihat Gambar 4). Pesan dikirim dari akun yang ditentukan dalam <smtp> atribut elemen from dengan kata sandi subjek dan isi teks biasa:

Harap kembali ke situs dan masuk menggunakan informasi berikut.

Nama Pengguna: nama pengguna

Kata sandi: kata sandi

Pesan ini dapat disesuaikan secara terprogram melalui penanganan aktivitas untuk peristiwa kontrol PasswordRecovery, atau secara deklaratif melalui MailDefinition properti .SendingMail Mari kita jelajahi kedua opsi ini.

Peristiwa SendingMail ini diaktifkan tepat sebelum pesan email dikirim dan merupakan kesempatan terakhir kami untuk menyesuaikan pesan email secara terprogram. Ketika peristiwa ini dinaikkan, penanganan aktivitas diteruskan objek jenis MailMessageEventArgs, yang propertinya Message berisi referensi ke email yang akan dikirim.

Buat penanganan aktivitas untuk SendingMail peristiwa dan tambahkan kode berikut, yang secara terprogram ditambahkan webmaster@example.com ke daftar CC.

Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs)Handles RecoverPwd.SendingMail
 e.Message.CC.Add("webmaster@example.com")
End Sub

Pesan email juga dapat dikonfigurasi melalui cara deklaratif. Properti PasswordRecovery MailDefinition adalah objek jenis MailDefinition. Kelas ini MailDefinition menawarkan sejumlah properti terkait email, termasuk From, , CC, PrioritySubject, IsBodyHtml, BodyFileName, dan lainnya. Sebagai permulaan Subject , atur properti ke sesuatu yang lebih deskriptif daripada yang digunakan secara default ( Kata Sandi ), seperti Kata sandi Anda telah diatur ulang...

Untuk menyesuaikan isi pesan email, kita perlu membuat file templat email terpisah yang berisi konten isi. Mulailah dengan membuat folder baru di situs web bernama EmailTemplates. Selanjutnya, tambahkan file teks baru ke folder ini bernama PasswordRecovery.txt dan tambahkan konten berikut:

Your password has been reset, <%UserName%>!

According to our records, you have requested that your password be reset. Your new
password is: <%Password%>

If you have any questions or trouble logging on please contact a site administrator.

Thank you!

Perhatikan penggunaan tempat penampung <%UserName%> dan <%Password%>. Kontrol PasswordRecovery secara otomatis mengganti kedua tempat penampung ini dengan nama pengguna pengguna dan kata sandi yang dipulihkan sebelum mengirim email.

Terakhir, arahkan MailDefinitionBodyFileName properti ke templat email yang baru saja kita buat ().~/EmailTemplates/PasswordRecovery.txt

Setelah membuat perubahan ini, kunjungi RecoverPassword.aspx kembali halaman dan masukkan nama pengguna dan jawaban keamanan Anda. Anda akan menerima email yang terlihat seperti yang ada di Gambar 5. Perhatikan bahwa webmaster@example.com telah CC'd dan bahwa subjek dan isi telah diperbarui.

Daftar Subjek, Isi, dan CC Telah Diperbarui

Gambar 5: Subjek, Isi, dan Daftar CC Telah Diperbarui (Klik untuk melihat gambar ukuran penuh)

Untuk mengirim email berformat HTML yang diatur IsBodyHtml ke True (defaultnya adalah False) dan perbarui templat email untuk menyertakan HTML.

Properti MailDefinition ini tidak unik untuk kelas PasswordRecovery. Seperti yang akan kita lihat di Langkah 2, kontrol ChangePassword juga menawarkan MailDefinition properti. Selain itu, kontrol CreateUserWizard menyertakan properti seperti itu yang dapat Anda konfigurasi untuk mengirim pesan email selamat datang secara otomatis kepada pengguna baru.

Catatan

Saat ini tidak ada tautan di navigasi sebelah kiri untuk mencapai RecoverPassword.aspx halaman. Pengguna hanya akan tertarik untuk mengunjungi halaman ini jika dia tidak berhasil masuk ke situs. Oleh karena itu, perbarui Login.aspx halaman untuk menyertakan tautan ke RecoverPassword.aspx halaman.

Mereset Kata Sandi Pengguna secara Terprogram

Saat mengatur ulang kata sandi pengguna, kontrol PasswordRecovery memanggil MembershipUser metode objekResetPassword. Metode ini memiliki dua kelebihan beban:

  • ResetPassword - mengatur ulang kata sandi pengguna. Gunakan kelebihan beban ini jika RequiresQuestionAndAnswer False.
  • ResetPassword(securityAnswer)- mengatur ulang kata sandi pengguna hanya jika securityAnswer yang disediakan benar. Gunakan kelebihan beban ini jika RequiresQuestionAndAnswer True.

Kedua kelebihan beban mengembalikan kata sandi baru yang dihasilkan secara acak.

Seperti metode lain dalam kerangka kerja Keanggotaan, metode mendelegasikan ResetPassword ke penyedia yang dikonfigurasi. aspnet_Membership_ResetPassword Memanggil SqlMembershipProvider prosedur tersimpan, meneruskan nama pengguna pengguna, kata sandi baru, dan jawaban kata sandi yang disediakan, di antara bidang lainnya. Prosedur tersimpan memastikan bahwa jawaban kata sandi cocok dan kemudian memperbarui kata sandi pengguna.

Beberapa catatan implementasi tingkat rendah:

  • Pengguna yang terkunci tidak dapat mengatur ulang kata sandinya. Namun, pengguna yang tidak disetujui dapat. Kami akan membahas status terkunci dan disetujui secara lebih rinci dalam tutorial Membuka kunci dan Menyetujui Akun Pengguna.
  • Jika jawaban kata sandi salah, jumlah upaya jawaban kata sandi pengguna yang gagal akan bertambah. Jika sejumlah upaya jawaban keamanan yang ditentukan terjadi dalam jendela waktu tertentu, pengguna akan dikunci.

Kata tentang Bagaimana Kata Sandi Acak Dihasilkan

Kata sandi yang dihasilkan secara acak yang ditampilkan dalam pesan email di Gambar 4 dan 5 dibuat oleh metode kelas GeneratePassword Keanggotaan. Metode ini menerima dua paramter input bilangan bulat - panjang dan numberOfNonAlphanumericCharacters - dan mengembalikan string setidaknya karakter panjang dengan setidaknya angkaOfNonAlphanumericCharacters jumlah karakter non-alfanumerik. Ketika metode ini dipanggil dari dalam kelas Keanggotaan atau kontrol Web terkait Login, nilai untuk kedua parameter ini ditentukan oleh konfigurasi MinRequiredPasswordLength dan MinRequiredNonalphanumericCharacters properti Keanggotaan, yang masing-masing kami atur ke 7 dan 1.

Metode ini GeneratePassword menggunakan generator angka acak yang kuat secara kriptografis untuk memastikan bahwa tidak ada bias dalam karakter acak apa yang dipilih. Selain itu, GeneratePassword adalah Public, yang berarti bahwa Anda dapat menggunakannya langsung dari aplikasi ASP.NET Anda jika Anda perlu menghasilkan string atau kata sandi acak.

Catatan

Kelas SqlMembershipProvider selalu menghasilkan kata sandi acak setidaknya 14 karakter, jadi jika MinRequiredPasswordLength kurang dari 14 maka nilainya diabaikan.

Langkah 2: Mengubah Kata Sandi

Kata sandi yang dihasilkan secara acak sulit diingat. Pertimbangkan kata sandi yang ditampilkan dalam Gambar 4: WWGUZv(f2yM:Bd. Coba lakukan itu ke memori! Tak perlu dikatakan, setelah pengguna dikirimi kata sandi yang dihasilkan secara acak dari jenis ini, dia akan ingin mengubah kata sandi menjadi sesuatu yang lebih mudah diingat.

Gunakan kontrol ChangePassword untuk membuat antarmuka bagi pengguna untuk mengubah kata sandinya. Sama seperti kontrol PasswordRecovery, kontrol ChangePassword terdiri dari dua tampilan: Ubah Kata Sandi dan Keberhasilan. Tampilan Ubah Kata Sandi meminta pengguna untuk kata sandi lama dan baru mereka. Setelah menyediakan kata sandi lama yang benar dan kata sandi baru yang memenuhi persyaratan panjang minimum dan karakter non-alfanumerik, kontrol ChangePassword memperbarui kata sandi pengguna dan menampilkan tampilan Keberhasilan.

Catatan

Kontrol ChangePassword memodifikasi kata sandi pengguna dengan memanggil MembershipUser metode objekChangePassword. Metode ChangePassword menerima dua String parameter input - oldPassword dan newPassword- dan memperbarui akun pengguna dengan newPassword, dengan asumsi oldPassword yang disediakan sudah benar.

ChangePassword.aspx Buka halaman dan tambahkan kontrol ChangePassword ke halaman, beri nama ChangePwd. Pada titik ini, tampilan Desain akan menampilkan tampilan Ubah Kata Sandi (lihat Gambar 6). Seperti kontrol PasswordRecovery, Anda dapat beralih di antara tampilan melalui Tag Pintar kontrol. Selain itu, tampilan tampilan ini dapat disesuaikan melalui berbagai properti gaya atau dengan mengonversinya menjadi templat.

Menambahkan Kontrol ChangePassword ke Halaman

Gambar 6: Tambahkan Kontrol ChangePassword ke Halaman (Klik untuk melihat gambar ukuran penuh)

Kontrol ChangePassword dapat memperbarui kata sandi pengguna yang saat ini masuk atau kata sandi pengguna lain yang ditentukan. Seperti yang ditunjukkan Gambar 6, tampilan Ubah Kata Sandi default hanya merender tiga kontrol TextBox: satu untuk kata sandi lama dan dua untuk kata sandi baru. Antarmuka default ini digunakan untuk memperbarui kata sandi pengguna yang saat ini masuk.

Untuk menggunakan kontrol ChangePassword untuk memperbarui kata sandi pengguna lain, atur properti kontrol DisplayUserName ke True. Melakukannya menambahkan TextBox keempat ke halaman, meminta nama pengguna pengguna yang kata sandinya berubah.

Pengaturan DisplayUserName ke True berguna jika Anda ingin membiarkan pengguna yang keluar mengubah kata sandinya tanpa harus masuk. Secara pribadi, saya pikir tidak ada yang salah dengan mengharuskan pengguna untuk masuk sebelum mengizinkannya untuk mengubah kata sandinya. Oleh karena itu, biarkan DisplayUserName diatur ke False (defaultnya). Namun, dalam membuat keputusan ini, kami pada dasarnya melarang pengguna anonim mencapai halaman ini. Perbarui aturan otorisasi URL situs sehingga menolak pengguna anonim mengunjungi ChangePassword.aspx. Jika Anda perlu me-refresh memori Anda pada sintaks aturan otorisasi URL, lihat kembali tutorial Otorisasi Berbasis Pengguna.

Catatan

Tampaknya DisplayUserName properti ini berguna untuk memungkinkan administrator mengubah kata sandi pengguna lain. Namun, bahkan ketika DisplayUserName diatur ke True, kata sandi lama yang benar harus diketahui dan dimasukkan. Kita akan berbicara tentang teknik untuk memungkinkan administrator mengubah kata sandi pengguna di Langkah 3.

ChangePassword.aspx Kunjungi halaman melalui browser dan ubah kata sandi Anda. Perhatikan bahwa pesan kesalahan ditampilkan jika Anda memasukkan kata sandi baru yang gagal memenuhi panjang kata sandi dan persyaratan karakter non-alfanumerik yang ditentukan dalam konfigurasi Keanggotaan (lihat Gambar 7).

Pesan kesalahan ditampilkan jika Anda memasukkan kata sandi baru yang gagal memenuhi panjang kata sandi dan persyaratan karakter non-alfanumerik.

Gambar 7: Tambahkan Kontrol ChangePassword ke Halaman (Klik untuk melihat gambar ukuran penuh)

Setelah memasukkan kata sandi lama yang benar dan kata sandi baru yang valid, kata sandi pengguna yang masuk diubah dan tampilan Berhasil ditampilkan.

Mengirim Email Konfirmasi

Secara default, kontrol ChangePassword tidak mengirim pesan email kepada pengguna yang kata sandinya baru saja diperbarui. Jika Anda ingin mengirim email, cukup konfigurasikan properti kontrol MailDefinition . Mari kita konfigurasikan kontrol ChangePassword sehingga pengguna dikirimi email berformat HTML yang berisi kata sandi baru mereka.

Mulailah dengan membuat file baru di EmailTemplates folder bernama ChangePassword.htm. Tambahkan markup berikut:

<html>
 <body>
 <h2>Your Password Has Been Changed!</h2>
 <p>
 This email confirms that your password has been changed.
 </p>
 <p>
 To log on to the site, use the following credentials:
 </p>
 <table>
 <tr>
 <td>
 <b>Username:</b>
 </td>
 <td>
 <%UserName%>
 </td>
 </tr>
 <tr>
 <td>
 <b>Password:</b>
 </td>
 <td>
 <%Password%>
 </td>
 </tr>
 </table>
 <p>
 If you have any questions or encounter any problems logging in,
 please contact a site administrator.
 </p>
 </body>
</html>

Selanjutnya, atur properti kontrol ChangePassword MailDefinition , , IsBodyHtmldan Subject properti ke ~/EmailTemplates/ChangePassword.htm, True, dan Kata sandi Anda telah berubah!, masing-masing.BodyFileName

Setelah membuat perubahan ini, kunjungi kembali halaman dan ubah kata sandi Anda lagi. Kali ini, kontrol ChangePassword mengirimkan email yang diformat HTML yang disesuaikan ke alamat email pengguna pada file (lihat Gambar 8).

Pesan Email Memberi Tahu Pengguna Bahwa Kata Sandi Mereka telah Berubah

Gambar 8: Pesan Email Memberi Tahu Pengguna Bahwa Kata Sandi Mereka telah Berubah (Klik untuk melihat gambar ukuran penuh)

Langkah 3: Mengizinkan Administrator Mengubah Kata Sandi Pengguna

Fitur umum dalam aplikasi yang mendukung akun pengguna adalah kemampuan pengguna administratif untuk mengubah kata sandi pengguna lain. Terkadang fungsionalitas ini diperlukan karena sistem tidak memiliki kemampuan bagi pengguna untuk mengubah kata sandi mereka sendiri. Dalam kasus seperti itu, satu-satunya cara bagi pengguna untuk memulihkan kata sandi yang terlupakan adalah agar administrator menetapkan kata sandi baru kepada mereka. Dengan kontrol PasswordRecovery dan ChangePassword, namun, pengguna administratif tidak perlu sibuk dengan mengubah kata sandi pengguna, karena pengguna mampu melakukan ini sendiri.

Tetapi bagaimana jika klien Anda bersikeras bahwa pengguna administratif harus dapat mengubah kata sandi pengguna lain? Sayangnya, menambahkan fungsionalitas ini bisa menjadi sedikit pekerjaan. Untuk mengubah kata sandi pengguna, kata sandi lama dan baru harus diberikan ke MembershipUser metode objek ChangePassword , tetapi administrator tidak perlu mengetahui kata sandi pengguna untuk mengubahnya.

Salah satu solusinya adalah terlebih dahulu mengatur ulang kata sandi pengguna dan kemudian mengubahnya ke kata sandi baru menggunakan kode seperti berikut:

Dim usr As MembershipUser = Membership.GetUser(username)
Dim resetPwd As String = usr.ResetPassword()
usr.ChangePassword(resetPwd, newPassword)

Kode ini dimulai dengan mengambil informasi tentang nama pengguna, yang merupakan pengguna yang kata sandinya ingin diubah administrator. Selanjutnya, ResetPassword metode ini dipanggil, yang menetapkan dan pengguna kata sandi acak baru. Kata sandi yang dihasilkan secara acak ini dikembalikan oleh metode dan disimpan dalam variabel resetPwd. Sekarang setelah kita mengetahui kata sandi pengguna, kita dapat mengubahnya melalui panggilan ke ChangePassword.

Masalahnya adalah bahwa kode ini hanya berfungsi jika konfigurasi sistem Keanggotaan diatur skemanya RequiresQuestionAndAnswer adalah False. Jika RequiresQuestionAndAnswer True, seperti halnya dengan aplikasi kami, maka ResetPassword metode perlu diteruskan jawaban keamanan, jika tidak, itu akan melemparkan pengecualian.

Jika kerangka kerja Keanggotaan dikonfigurasi untuk memerlukan pertanyaan dan jawaban keamanan, namun klien Anda bersikeras bahwa administrator dapat mengubah kata sandi pengguna, Anda memiliki tiga opsi:

  • Lempar tangan Anda ke udara dan beri tahu klien Anda bahwa ini hanya satu hal yang tidak dapat dilakukan.
  • Atur RequiresQuestionAndAnswer ke False. Ini menghasilkan aplikasi yang kurang aman. Bayangkan bahwa pengguna jahat telah mendapatkan akses ke kotak masuk email pengguna lain. Mungkin pengguna yang disusupi telah meninggalkan meja mereka untuk pergi makan siang dan tidak mengunci stasiun kerja mereka, atau mungkin mereka mengakses email mereka dari terminal publik dan tidak keluar. Dalam kedua kasus, pengguna yang jahat dapat mengunjungi RecoverPassword.aspx halaman dan memasukkan nama pengguna pengguna. Sistem kemudian akan mengirim kata sandi yang dipulihkan melalui email tanpa meminta jawaban keamanan.
  • Melewati lapisan abstraksi yang dibuat oleh kerangka kerja Keanggotaan dan bekerja langsung dengan database SQL Server. Skema Keanggotaan menyertakan prosedur tersimpan bernama aspnet_Membership_SetPassword yang menetapkan kata sandi pengguna dan tidak memerlukan jawaban keamanan atau kata sandi lama untuk menyelesaikan tugasnya.

Tidak satu pun dari opsi ini yang sangat menarik, tetapi itulah cara hidup pengembang kadang-kadang berjalan.

Saya melanjutkan dan menerapkan pendekatan ketiga, menulis kode yang melewati Membership kelas dan MembershipUser dan beroperasi langsung terhadap SecurityTutorials database.

Catatan

Dengan bekerja langsung dengan database, enkapulasi yang disediakan oleh kerangka kerja Keanggotaan hancur. Keputusan ini mengikat kita dengan SqlMembershipProvider, membuat kode kita kurang portabel. Selain itu, kode ini mungkin tidak berfungsi seperti yang diharapkan dalam versi ASP.NET mendatang jika skema Keanggotaan berubah. Pendekatan ini adalah solusi sementara dan, seperti kebanyakan solusi, bukanlah contoh praktik terbaik.

Kode ini memiliki beberapa bit yang tidak menarik dan cukup panjang. Oleh karena itu, saya tidak ingin mengacaukan tutorial ini dengan pemeriksaan mendalam tentang hal itu. Jika Anda tertarik untuk mempelajari lebih lanjut, unduh kode untuk tutorial ini dan kunjungi ~/Administration/ManageUsers.aspx halaman. Halaman ini, yang kami buat dalam tutorial sebelumnya, mencantumkan setiap pengguna. Saya telah memperbarui GridView untuk menyertakan tautan ke UserInformation.aspx halaman, meneruskan nama pengguna pengguna yang dipilih melalui querystring. Halaman UserInformation.aspx menampilkan informasi tentang pengguna dan Kotak Teks yang dipilih untuk mengubah kata sandi mereka (lihat Gambar 9).

Setelah memasukkan kata sandi baru, mengonfirmasinya di TextBox kedua, dan mengklik Tombol Perbarui Pengguna, postback muncul dan aspnet_Membership_SetPassword prosedur tersimpan dipanggil, memperbarui kata sandi pengguna. Saya mendorong pembaca yang tertarik dengan fungsionalitas ini untuk menjadi lebih terbiasa dengan kode dan mencoba memperluas fungsionalitas untuk menyertakan pengiriman email kepada pengguna yang kata sandinya diubah.

Administrator Dapat Mengubah Kata Sandi Pengguna

Gambar 9: Administrator Dapat Mengubah Kata Sandi Pengguna (Klik untuk melihat gambar ukuran penuh)

Catatan

Halaman UserInformation.aspx saat ini hanya berfungsi jika kerangka kerja Keanggotaan dikonfigurasi untuk menyimpan kata sandi dalam format Clear atau Hashed. Ini tidak memiliki kode untuk mengenkripsi kata sandi baru, meskipun Anda diundang untuk menambahkan fungsionalitas ini. Cara yang saya sarankan untuk menambahkan kode yang diperlukan adalah dengan menggunakan dekompilasi seperti Reflector untuk memeriksa kode sumber untuk metode dalam .NET Framework; mulailah dengan memeriksa SqlMembershipProvider metode kelas ChangePassword . Ini adalah teknik yang saya gunakan untuk menulis kode untuk membuat hash kata sandi.

Ringkasan

ASP.NET menawarkan dua kontrol untuk membantu pengguna mengelola kata sandi mereka. Kontrol PasswordRecovery berguna bagi mereka yang lupa kata sandi mereka. Bergantung pada konfigurasi kerangka kerja Keanggotaan, pengguna mengirim kata sandi yang ada melalui email atau kata sandi baru yang dibuat secara acak. Kontrol ChangePassword memungkinkan pengguna memperbarui kata sandi mereka.

Seperti kontrol Login dan CreateUserWizard, kontrol PasswordRecovery dan ChangePassword merender antarmuka pengguna yang kaya tanpa harus menulis jilatan markup deklaratif atau baris kode. Jika antarmuka pengguna default tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikannya melalui berbagai properti gaya. Atau, antarmuka kontrol dapat dikonversi menjadi templat, untuk tingkat kontrol yang lebih halus. Di balik layar kontrol ini menggunakan API Keanggotaan, memanggil MembershipUser metode dan ChangePassword objekResetPassword.

Selamat Pemrograman!

Bacaan lebih lanjut

Untuk informasi selengkapnya tentang topik yang dibahas dalam tutorial ini, lihat sumber daya berikut:

Tentang Penulis

Scott Mitchell, penulis beberapa buku ASP/ASP.NET dan pendiri 4GuysFromRolla.com, telah bekerja dengan teknologi Microsoft Web sejak 1998. Scott bekerja sebagai konsultan, pelatih, dan penulis independen. Buku terbarunya adalah Sams Teach Yourself ASP.NET 2.0 dalam 24 Jam. Scott dapat dijangkau di mitchell@4guysfromrolla.com atau melalui blognya di http://ScottOnWriting.NET.

Terima kasih khusus untuk

Seri tutorial ini ditinjau oleh banyak peninjau yang bermanfaat. Peninjau prospek untuk tutorial ini termasuk Michael Emmings dan Suchi Banerjee. Tertarik untuk meninjau artikel MSDN saya yang akan datang? Jika demikian, menjatuhkan saya baris di mitchell@4GuysFromRolla.com