ASP.NET mehanizmi autentifikacije i autorizacije
Jedna od faza u razvoju aplikacija jeste i kreiranje efikasnog mehanizma autentifikacije i autorizacije korisnika.
Jedna od faza u razvoju aplikacija jeste i kreiranje efikasnog mehanizma autentifikacije i autorizacije korisnika. Kao i mnogo drugih stvari u ovoj oblasti, i ovdje postoji više načina na koji se mogu implementirati takvi mehanizmi.
Prije nego krenemo sa dizajnom i implementacijom, potrebno je da analiziramo sve aspekte koji se tiču sistema za kojeg dizajniramo mehanizam.
Da bi lakše mogli demonstrirati i pojasniti arhitekturu mehanizma, pretpostavimo da se radi o sistemu za upravljanje sadržajem, odnosno o nekom portalu gdje postoji dio za administraciju, ali i dio stranice gdje se korisnici mogu prijaviti na sistem, komentarisati sadržaj, odgovoriti na anketu itd.
Dakle, iz odabranog sistema, možemo zaključiti da će sistem koristiti nekoliko tipova korisnika, koji imaju određene uloge (engl. Roles) u sistemu. Također postoje tri logičke cjelineu arhitekturi: Administracijski dio (samo za korisnike sa ulogama: Administratora, Moderatora itd.), Korisnički dio (za korisnike koji su prijavljeni na sistem a imaju najmanju ulogu u sistemu) i Javni dio (gdje nije potrebna prijava na sistem).
Pojavom socijalnih mreža i mnogo servisa, korisnici su "prisiljeni" da se registriraju na takve sisteme, što ima efekta i na ovaj ciljani sistem, zbog čega žele da što brže koriste ovaj sistem bez prevelikog zamaranja oko registracije, tj.ponovnog unošenja podataka i pamćenja novih pristupnih podataka (korisničko ime i šifra). Postoji nekoliko inicijativa i rješenja za omogućavanje jedinstvenog načina prijava na različite servise (engl. Single Sign In) od kojih će nekoliko biti prikazano u nastavku.
Osnovna autentifikacija i autorizacija web aplikacije
Prije bilo kakve integracije sa socijalnim mrežama, potrebno je implementirati vlastiti mehanizam autentifikacije i autorizacije kao i strukturu u bazi podataka u koju će se pohranjivati podaci. Iz ciljanog sistema za koji se pravi mehanizam, moguće je uvidjeti da je potrebno kreirati tabele: User (podaci o korisnicima), Role (uloge koje korisnici mogu imati) i UserRole (lista uloga koje korisnik ima u sistemu).
Prethodno prikazana schema sa tabelama je sasvim uobičajena pri kreiranju sličnih mehanizama, a moguće je kasnije proširiti sa novim atributima u tabelama ili novim tabelama koje mogu sadržavati specifične podatke,npr.: korisničke akcije, korisnički komentari itd.
Za najjednostavniji način implementacije sistema autentifikacije i autorizacije potrebno je uraditi sljedeće:
- Kreiranje Login forme sa poljima: Username (Email) i Password, dugmića kojom će se inicirati provjera unesenih podataka:
- Validacija unesenih podataka prije provjere unesenih podataka (ako polja nisu popunjenja, ako email nije u pravilnom formatu itd.):
- Implementacija funkcija kojim će se provjeriti i pronaći korisnik koji ima podatke za koje se vrši provjera:
- Ako je korisnik uspješno prijavljen, pohrana podataka o trenutno prijavljenom korisniku u sesiju ili cookie (kako bi se ne bi morao stalno prijavljivati za svaku zaštićenu stranicu kojoj želi pristupiti):
- Osiguravanje (provjera da li je korisnik prijavljen i da li posjeduje dovoljno privilegija) svake stranice ili dijela stranice gdje korisnik ne bi trebao pristupiti ukoliko nije prijavljen ili nema dovoljno privilegija:
Sa ovim koracima je osiguran osnovni mehanizam autentifikacije i autorizacije ali i solidna osnova za integraciju sa drugim servisima.
OpenID
OpenID je otvoreni standard koji omogućuje da se korisnici sa jednim setom podataka prijave na različite servise koji ga podržavaju. Ne postoji centralizirano mjesto pohrane pristupnih podataka, nego je sve distribuirano na različitim servisima. Web aplikacija može da bude OpenID Identity Provider (korisnici koji su se registrovali na našoj web aplikaciji mogu se autentificirati na druge web aplikacije ukoliko one podržavaju OpenID) i OpenID Relying Party (korisnici se mogu prijaviti na našu web aplikaciju na osnovu podataka koje pružaju OpenID Identity Provideri). U ovom članku biće demonstrirana upotreba OpenID-a gdje će naša web aplikacija biti Relying Party koristeći biblioteku DotNetOpenAuth.
Proces integracije je prilično jednostavan i ogleda se u sljedećim koracima:
- Download biblioteke i popratnih fajlova sa DotNetOpenAuth
- Referenciranje biblioteke DotNetOpenAuth.dll u projektu
Kopiranje fajlova:
o openid-en.js – generalne postavke o OpenID-u
o openid-jquery.js – implementacija plugina za logiranje
Kopiranje foldera i fajlova:
o images, images.small, images.large – slike potrebne za plugin
o openid.css – definicija izgleda plugina
o openid-shadow.css – alternativna definicija izgleda plugina
- Kopiranje fajla xrds.aspx u root projekta – služi za komunikaciju sa krajnjim korisnikom
- Podešavanje postavki u web.configu
- Referenciranje jQuery-a na stranicu Login.aspx
- Referenciranje OpenID biblioteka i inicijalizacija plugina:
- Implementacija koda u Login.aspx.cs za autentifikaciju putem OpenID-a:
Pokretanje projekta, plugin se inicijalizira:
Klikom na bilo koju ikonu ili smo preusmjereni na stranicu OpenID Identity Providera, ili se otvara posebno polje gdje se može unijeti OpenID korisničko ime i tek nakon toga se korisnik prebacuje na stranicu providera.
Odobravanje pristupa traženim podacima, korisnik se preusmjerava nazad u web aplikaciju odakle je došao gdje se provjerava da li je korisnika prijavljen. Ukoliko je uspješno prijavljen dalje se preusmjerava na predefinisanu ili traženu stranicu.
Facebook Connect
Danas je nezamislivo da bilo kakva integracija sa socijalnim mrežama ne obuhvati i Facebook te mogućnosti prijave 700+ miliona korisnika sa te mreže. Postoji više načina za integraciju, uključujući i autentifikaciju, a u nastavku će biti objašnjeno kako to učiniti upotrebom biblioteke Facebook C# SDK.
Za autentifikaciju putem Facebook Connect-a, potrebno je uraditi sljedeće:
· Registracija aplikacije na developers.facebook.com> Apps
· Download biblioteke i popratnih fajlova sa Facebook C# SDK
· Referenciranje biblioteka Facebook.dll i Facebook.Web.dll u projekat
· Podešavanje postavki u web.configu
- Implementacija koda u Login.aspx:
- Implementacija koda u Login.asp.cs:
Pokretanje aplikacije korisnik vidi sljedeći dugmić:
Klikom na dugmić otvara se dodatni prozorčić koji vodi do klasičnog Facebook Logina:
Unosom pristupnih podataka, korisnik se dalje preusmjerava na stranice gdje su liste permisija koje aplikacija traži za odobrenje od strane korisnika.
Nakon odobravanja aplikacije, prozorčić se zatvara i korisnik je nakon toga preusmjeren na predefinisanu ili traženu lokaciju.
Integracija različitih mehanizama
Kako bi uradili integraciju prethodno iznesenih načina potrebno je napraviti manje izmjene u prethodno prikazanom kodu za svaki od načina kao i dizajnu stranice Login.aspx. Promjene se ogledaju u tome da korisnik nakon što se prijavi putem OpenID-a ili Facebook Connecta da ukoliko ne postoji u bazi da se napravi novi zapis sa podacima za koje postoji dozvola od strane korisnika.
Pokretanje projekta, dobijamo sljedeće:
Na ovaj način je korisnicima web aplikacije osigurano da se mogu prijaviti sa računima sljedećih servisa: Google, Yahoo, AOL, WordPress, Blogger, Verisign, LiveJournal, Facebook itd., a aplikacija će dobiti vrlo kvalitetne i raznovrsne podatke (za koje postoji odobrenje) te time i skratiti vrijeme registracije.







Komentari (0)