Normālos apstākļos, kad mēs veicam piekļuves tiesību pārvaldību, mēs saglabāsim lietotāja pamatinformāciju pēc pareizas pieteikšanās sesijā un saņemsim to katru reizi, kad lietotājs nākotnē pieprasa lapas vai saskarnes datus
Sesija, lai redzētu un salīdzinātu, vai viņš ir pieteicies un vai viņš var piekļūt pašreizējai lapai.
Sesijas princips ir ģenerēt SessionID servera pusē, kas atbilst saglabātajiem lietotāja datiem, un SessionID tiek saglabāts sīkdatnē, un klients to nēsā līdzi katru reizi, kad tas tiek pieprasīts
Sīkdatne, serveris atrod servera pusē saglabātos datus, pamatojoties uz sīkdatnes sesijas ID.
FormsAuthentication nodrošina korporācija Microsoft, lai mēs izstrādātāji varētu izmantot autentifikācijai. Izmantojot šo autentifikāciju, mēs varam saglabāt lietotājvārdu un dažus lietotāja datus sīkdatnēs,
Pamata identitātes un lomas autentifikāciju var viegli panākt, izmantojot pamata nosacījumu iestatījumus.
Šeit jāpanāk lomu piekļuves kontroles ieviešana, izmantojot sistēmas nodrošināto autorizāciju, neizmantojot dalību.
1. Izveidojiet biļeti
Pēc lietotāja pieteikšanās lietotāja ID un atbilstošā loma (vairākām lomām, atdalīta) tiek saglabāta biļetē.
Šifrējiet biļeti, izmantojot FormsAuthentication.Encrypt.
Saglabājiet šifrēto biļeti atbildes sīkfailā (klientam js nav jālasa šī sīkdatne, tāpēc vislabāk ir iestatīt HttpOnly=True, lai novērstu pārlūkprogrammas uzbrukumu zagšanu un viltošanu). Tādā veidā jūs varat to nolasīt no pieprasījuma sīkdatnes nākamreiz.
Vienkārša demonstrācija ir šāda:
bool isPersistent, //vai saglabāt (iestatīt pēc vajadzības, ja iestatīts uz noturību, nosūtot sīkfailu, ir jāiestata sīkdatnes derīguma termiņš)
Sestais FormsAuthenticationTicket parametrs saglabā virknes tipa userData, kurā tiek saglabāts pašreizējā lietotāja lomas ID, atdalot to ar komatu.
Piesakoties ar lietotājvārdu "test", klientā parādās žurnāla sīkdatne
2. Iegūstiet sertifikācijas informāciju
Pēc pieteikšanās satura lapā mēs varam iegūt uname informāciju, izmantojot pašreizējā pieprasījuma User.Identity.Name, vai arī mēs varam atšifrēt sīkfailu biļetes iegūšanas pieprasījumā un pēc tam iegūt uname un userData (tas ir, iepriekš saglabāto lomas ID informāciju).
3. Realizējiet atļauju piekļuves kontroli, izmantojot anotācijas atribūtus
Veidlapas autentifikācijas un lomu pārvaldības iespējošanas konfigurēšana vietnē web.config
Pievienojot anotācijas rekvizītus kontrollerim un darbībai, kur mēs iegūstam iestatīto lomu? Tā kā mēs neizmantojam uz dalību balstītu autentifikāciju, mēs izveidosim arī pielāgotu RoleProvider. Nosaukums ir CustomRoleProvider, kas ir pārmantots no RoleProvider. Šeit ir sava CustomRoleProvider.cs faila izveide mapē Helper zem MVCApp.
RoleProvider ir daudz abstraktu metožu, un mēs ieviešam tikai GetRolesForUser metodi, lai iegūtu lietotāju lomas. Lietotāja lomu šeit var vaicāt no datu bāzes atbilstoši iegūtajam lietotāja ID vai sesijas laikā saglabātajam vai sīkdatnē. Šeit es jau esmu saglabājis lomu biļetes lietotāja datos, tāpēc saņemsim to no biļetes.
Ja nepieciešams, pievienojiet anotācijas atribūtus validētajam kontrolierim vai darbībai, piemēram, šī darbība ļauj piekļūt tikai ar RoleID 1 vai 2 vai 3, un pašreizējais lietotājs RoleID ir (7, 1, 8), kas nozīmē, ka lietotājam ir tiesības piekļūt.
P.S. :1. Biļete tiek saglabāta sīkdatnes derīguma termiņa laikā, un, ja pārlūkprogramma ir aizvērta, lai atcerētos pašreizējo biļeti, parametrus var iestatīt, kad tiek instancēta FormsAuthenticationTicket.
2. Lomas iegūšanu var nolasīt tieši no datu bāzes, nesaglabājot to biļetes lietotāja datos, un lietotāja dati var saglabāt citu informāciju.
3. Ja vēlaties elastīgi konfigurēt kontroliera un darbības atļautās piekļuves lomas, varat pielāgot OnAuthorization metodi AuthorizeAttribute ignorēšanā, kurā šī metode tiek izmantota
Izlasiet pašreizējā lapā atļauto lomas ID un pārbaudiet to saskaņā ar pašreizējā lietotāja RoleID. Tādā veidā tiek realizēta elastīga lomas konfigurācija.
4. Biļetē esošā informācija galu galā tiek glabāta sīkdatnē, un drošība joprojām ir pēc jūsu ieskatiem, es personīgi domāju, ka labāk ir saglabāt UserID un RoleID sesijā.
|