Tavapärastes oludes, kui teeme juurdepääsu haldamist, salvestame kasutaja põhiandmed pärast õiget sisselogimist sessioonis ning saame selle iga kord, kui kasutaja tulevikus lehe või liidese andmeid taotleb
Sessioon, et näha ja võrrelda, kas ta on sisse logitud ja kas ta pääseb praegusele lehele ligi.
Sessioni põhimõte on genereerida serveri poolel SessionID, mis vastab salvestatud kasutajaandmetele, ning SessionID salvestatakse küpsisesse, mille klient kannab seda iga kord, kui seda taotletakse,
Cookie, server leiab serveri poolel salvestatud andmed küpsise sessiooni ID põhjal.
FormsAuthentication on Microsofti poolt loodud meile arendajatele, et neid autentimiseks kasutada. Selle autentimise kaudu saame kasutajanime ja osa kasutajaandmeid küpsistesse salvestada,
Põhiline identiteedi ja rolli autentimine on lihtne saavutada põhiliste tingimuste seadistustega.
Siin saavutatakse rollipõhine juurdepääsukontroll süsteemi pakutava Authorize abil ilma liikmelisuseta.
1. Loo pilet
Pärast kasutaja sisselogimist salvestatakse piletisse kasutaja ID ja vastav roll (mitme rolli puhul eraldi).
Krüpteeri pilet FormsAuthentication.Encrypt abil.
Salvesta krüpteeritud pilet Response-küpsises (klient js ei pea seda küpsist lugema, seega on parim seada HttpOnly=True, et takistada brauserirünnakutel küpsiste varastamist ja võltsimist). Nii saad seda järgmisel korral lugeda Request küpsisest.
Lihtne demo on järgmine:
bool isPersistent, //kas püsida (seadistada vastavalt vajadusele, kui seatud püsivuseks, tuleb küpsise aegumisseade küpsise saatmisel seada)
FormsAuthenticationTicketi kuues parameeter salvestab tüübi stringi userData, kus on praeguse kasutaja rolli-ID, eraldatud komaga.
Kui logitakse sisse kasutajanimega "test", ilmub kliendile logiküpsis
2. Hankige sertifitseerimisteave
Pärast sisselogimist saame sisulehel saada uname info praeguse taotluse User.Identity.Name kaudu või dešifreerida küpsise päringus, et saada pilet, ning seejärel saada sealt uname ja kasutajaandmed (ehk varem salvestatud rolli ID info).
3. Teosta õiguste juurdepääsu kontroll annotatsiooni atribuutide kaudu
Seadista vormi autentimise ja rollihalduse lubamine web.config-is
Kui lisame annotatsiooniomadused Controllerile ja Actionile, kust saame määratud rolli? Kuna me ei kasuta liikmepõhist autentimist, loome ka kohandatud rollipakkuja. Nimi on CustomRoleProvider, mis pärineb RoleProviderilt. Siin on sinu enda CustomRoleProvider.cs faili loomine Abikaustas MVCApp all.
RoleProvideris on palju abstraktseid meetodeid ning me rakendame GetRolesForUser meetodit ainult kasutajarollide saamiseks. Kasutajarolli saab siin andmebaasist pärida vastavalt saadud kasutaja ID-le, sessioonis salvestatud või küpsises salvestatud ID-le. Siin olen juba salvestanud rolli pileti kasutajaandmetesse, nii et võtame selle piletist.
Vajadusel lisa annotatsiooniatribuutid valideeritud kontrollerile või tegevusele, näiteks see tegevus lubab ligipääsu ainult RoleID-ga 1, 2 või 3 ning praegune kasutaja RoleID on (7, 1, 8), mis tähendab, et kasutajal on õigus sellele ligipääsule.
P.S. :1. Pilet salvestatakse küpsise aegumisajal ning kui brauser on suletud praeguse pileti mäletamiseks, saab parameetreid seada, kui FormsAuthenticationTicket käivitatakse.
2. Role'i omandamist saab lugeda otse andmebaasist ilma, et see salvestataks pileti kasutajaandmetesse, ning userData saab salvestada muud teavet.
3. Kui soovid paindlikult seadistada Controlleri ja Action'i lubatud ligipääsu rolle, saad AuthorizeAttribute ülekirjutuses kohandada OnAuthorization meetodit, kus seda meetodit kasutatakse
Loe praegusel lehel lubatud rolli-ID-d ja kontrolli seda vastavalt praeguse kasutaja RoleID-le. Nii realiseerub rolli paindlik konfiguratsioon.
4. Piletis olev info salvestatakse lõpuks küpsisesse ja turvalisus on endiselt sinu otsustada, minu arvates on parem salvestada UserID ja RoleID sessioonis.
|