Single Sign On (SSO)

POJO
maj 6, 2016
Slanje e-mailova iz aplikacije, paralelno ili ne?
jun 27, 2016

Single sign-on (SSO) je proces autentikacije sesije korisnika koji dozvoljava  da se samo jednim unošenjem korisničkog imena i lozinke izvrši logovanje u više aplikacija. Postoji više načina na koji se ovo može postići, a mi smo se odlučili za sledeći koncept.

Autentikacija funkcioniše  tako što se kreira autentikacioni cookie na domenu. Kada ima više domena logovanje na npr. domen1 kreira autentikacioni cookie za domen1 i nemoguće je istovremeno kreirati i autentikacioni cookie za domen2. Iz tog razloga uveli smo poseban domen SSO. Sada prilikom logovanja na domen1 korisnik se redirektuje na SSO i na domenu SSO se kreiraju cookie-ji sa ključevima koji označavaju domen1 i domen2. Ovi cooki-ji će značiti da se korisnik ulogovao na određeni domen iako na tom domenu nema autentikacionog cookie-ja. Npr. korisnik se loguje na domen1 i autentikacioni cookie se kreira na tom domenu ali takođe i odgovarajući cookie-ji sa ključevima koji označavaju domen1 i domen2 na SSO domenu. Zatim korisnik pokušava da pristupi domenu 2, ali na njemu nema autentikacionog cooki-ja. Korisnik se redirektuje na SSO i tamo se pronalazi cookie sa ključem za domen 2 što znači da je korisniku već odobren pristup. Korisnik se redirektuje na domen 2,  kreira se autentikacioni cookie na domenu 2 i korisnik pristupa željenoj strani bez ponovnog logovanja.

Kako bi se ovo implementiralo koristili smo http handler-e. Oni nam omogućavaju da jednostavnim deploy-om dll-a i podešavanjem web.config file-a proširimo funkcionalnost host domena bez promene njegovog  koda. Npr. u našem primeru kada korisnik prvi put pristupa domenu 1 pa se zatim redirektuje na SSO, on na SSO upisuje korisničko ime i lozinku. Zatime se vrši redirektovanje na domen1 kako bi se proverilo da li korisnik može da se uloguje? Taj request obrađuje login http handler koji smo implementirali koristeći MembershipProvider.  Pozivamo metodu MembershipProvider-a ValidateUser i to je jedina metoda koja u ovom slučaju mora da bude implementirana i u kodu domena1. Kada dobije rezultat logovanja login handler redirektuje nazad na SSO kako bi bilo izvšeno kreiranje opisanih cooki-ja u slučaju uspešnog logovanja. Zatim SSO redirektuje request na http handler na izvorišnom domenu (domen1) koji izvrši kreiranje autentikacionog cooki-a na svom domenu i redirektuje korisnika na traženu stranicu na domenu 1.

Srećno kodiranje!

Nebojša Golubović
Senior Developer