Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
Gambar 1: , RequiresQuestionAndAnswer
, EnablePasswordRetrieval
dan EnablePasswordReset
Pengaruhi Tampilan dan Perilaku kontrol PasswordRecovery (Klik untuk melihat gambar ukuran penuh)
Catatan
Dalam tutorial Membuat Skema Keanggotaan di SQL Server, kami mengonfigurasi penyedia Keanggotaan dengan mengatur RequiresQuestionAndAnswer
ke True, EnablePasswordRetrieval
ke False, dan EnablePasswordReset
ke True.
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
.
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.
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.
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
, Priority
Subject
, 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 MailDefinition
BodyFileName
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.
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 jikaRequiresQuestionAndAnswer
False.ResetPassword(securityAnswer)
- mengatur ulang kata sandi pengguna hanya jika securityAnswer yang disediakan benar. Gunakan kelebihan beban ini jikaRequiresQuestionAndAnswer
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.
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).
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
, , IsBodyHtml
dan 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).
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 mengunjungiRecoverPassword.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.
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:
- Mulai Cepat Kontrol ChangePassword
- Mulai Cepat Kontrol PasswordRecovery
- Mengirim Email di ASP.NET
System.Net.Mail
Tanya Jawab Umum
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