Dalam keadaan normal, ketika kami melakukan manajemen hak akses, kami akan menyimpan informasi dasar pengguna setelah login yang benar dalam sesi, dan mendapatkannya setiap kali pengguna meminta data halaman atau antarmuka di masa mendatang
Sesi untuk melihat dan membandingkan apakah dia masuk dan apakah dia dapat mengakses halaman saat ini.
Prinsip Session adalah menghasilkan SessionID di sisi server yang sesuai dengan data pengguna yang disimpan, dan SessionID disimpan dalam cookie, dan klien akan membawanya setiap kali diminta
Cookie, server menemukan data yang disimpan di sisi server berdasarkan ID sesi dalam cookie.
FormsAuthentication disediakan oleh Microsoft untuk digunakan oleh kami pengembang untuk autentikasi. Melalui otentikasi ini, kami dapat menyimpan nama pengguna dan beberapa data pengguna dalam cookie,
Identitas dasar dan autentikasi peran dapat dengan mudah dicapai melalui pengaturan kondisi dasar.
Efek yang akan dicapai di sini adalah menerapkan kontrol akses berbasis peran menggunakan Otorisasi yang disediakan sistem tanpa menggunakan keanggotaan.
1. Buat Tiket
Setelah pengguna masuk, ID pengguna dan peran yang sesuai (untuk beberapa peran, terpisah) disimpan dalam tiket.
Enkripsi tiket dengan FormsAuthentication.Encrypt.
Simpan tiket terenkripsi di cookie Respons (klien js tidak perlu membaca cookie ini, jadi sebaiknya atur HttpOnly=True untuk mencegah serangan browser mencuri dan memalsukan cookie). Dengan cara ini, Anda dapat membacanya dari cookie Permintaan lain kali.
Demo sederhana adalah sebagai berikut:
bool isPersistent, //apakah akan bertahan (diatur sesuai kebutuhan, jika diatur ke persistensi, pengaturan Kedaluwarsa cookie harus diatur saat mengirim cookie)
Parameter keenam FormsAuthenticationTicket menyimpan userData dari jenis string, di mana ID peran pengguna saat ini disimpan, dipisahkan oleh koma.
Saat masuk dengan nama pengguna "pengujian", cookie log muncul di klien
2. Dapatkan informasi sertifikasi
Setelah masuk, di halaman konten, kita dapat memperoleh informasi uname melalui User.Identity.Name permintaan saat ini, atau kita dapat mendekripsi cookie dalam permintaan untuk mendapatkan tiket, dan kemudian mendapatkan uname dan userData (yaitu, informasi ID peran yang disimpan sebelumnya) darinya.
3. Mewujudkan kontrol akses izin melalui atribut anotasi
Mengonfigurasi Aktifkan Autentikasi Formulir dan Manajemen Peran di web.config
Ketika kita menambahkan properti anotasi ke Controller dan Action, dari mana kita mendapatkan Role yang ditetapkan? Karena kami tidak menggunakan autentikasi berbasis Keanggotaan, kami juga akan membuat RoleProvider khusus. Namanya adalah CustomRoleProvider, yang diwarisi dari RoleProvider. Berikut adalah pembuatan file CustomRoleProvider.cs Anda sendiri di folder Helper di bawah MVCApp.
Ada banyak metode abstrak di RoleProvider, dan kami hanya mengimplementasikan metode GetRolesForUser untuk mendapatkan peran pengguna. Peran pengguna di sini dapat dikueri dari database sesuai dengan ID pengguna yang diperoleh, atau yang disimpan dalam sesi atau disimpan dalam cookie. Di sini saya sudah menyimpan peran di userData tiket, jadi mari kita dapatkan dari tiket.
Jika perlu, tambahkan atribut anotasi ke Pengontrol atau Tindakan yang divalidasi, misalnya, Tindakan ini hanya mengizinkan akses dengan RoleID 1 atau 2 atau 3, dan RoleID pengguna saat ini adalah (7, 1, 8), yang berarti pengguna memiliki hak untuk mengakses.
P.S. :1. Tiket disimpan pada waktu kedaluwarsa cookie, dan jika browser ditutup untuk mengingat tiket saat ini, parameter dapat diatur saat FormsAuthenticationTicket dibuat.
2. Akuisisi Role dapat dibaca langsung dari database tanpa disimpan di userData tiket, dan userData dapat menyimpan informasi lainnya.
3. Jika Anda ingin mengonfigurasi Peran Akses yang Diizinkan Pengontrol dan Action secara fleksibel, Anda dapat menyesuaikan metode OnAuthorization di penggantian AuthorizeAttribute, tempat metode tersebut digunakan
Baca ID peran yang diizinkan di halaman saat ini dan periksa sesuai dengan ID Peran pengguna saat ini. Dengan cara ini, konfigurasi peran yang fleksibel direalisasikan.
4. Informasi dalam tiket pada akhirnya disimpan dalam cookie, dan keamanannya masih atas kebijaksanaan Anda sendiri, saya pribadi berpikir lebih baik untuk menyimpan UserID dan RoleID dalam sesi.
|