Prijava korisnika u Silverlight aplikaciji, 2. dio
Forms autentikacija
Forms autentikacija je standardni ASP.NET mehanizam koji koristi autentikacijski Cookie za spremanje korisničkih podataka. Može se koristiti sa ASP.NET membership and roles providerom i gotovim kontrolama za logiranje, ali ovdje je opisan način manualnog kreiranja autentikacijskog cookia. Sav promet nije kriptiran (osim mogućnosti binarne serijalizacije .NET objekata), i postoji mogućnost krađe cookia i krivog predstavljanja.
Konfiguracija web.configa ASP.NETa za upotrebu Forms autentikacije je vrlo kompleksna ;) :
<authentication mode="Forms"/>
Konfiguraciju web servisa (WCF) nije potrebno mijenjati kao na prethodnom principu sa SSLom, pošto se sadržaj SOAP poruka ne mijenja. Za autentikaciju klijenta potrebno je napravi web servis koji izvršava provjeru korisničkih podataka i sprema autentikacijski cookie u Response objekt, primjer (bez validacije korisnika):
[ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class AuthService { [OperationContract] public bool Login(string username,string pass) { // provjera korisnika u bazi ... var ticket = new FormsAuthenticationTicket(1, username, DateTime.Now,DateTime.Now.AddDays(7),true,"id"+username); var encrypt = FormsAuthentication.Encrypt(ticket); var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypt); HttpContext.Current.Response.Cookies.Add(authCookie); return true; // moguce je i vratiti poruku greske ili slicno } [OperationContract] public void Signout() { FormsAuthentication.SignOut(); } }
Primjer autentikacije klijenta: [more]
private void Login_Click(object sender, System.Windows.RoutedEventArgs e) { var client=new AuthServicewClient(); var success = client.LoginAsync(txtUsername.Text,txtPass.Text); }
U pozivu na web servis poslovne logike, izvršava se provjera identiteta korisnika:
[OperationContract] public string GetSomething() { if (HttpContext.Current.User.Identity.IsAuthenticated) { return "OK: "+ HttpContext.Current.User.Identity.Name; } return "error, no user"; }
Životni vijek requesta:
1. Instanciranje proxy objekta za autentikacijski servis
2. Slanje korisničkih podataka
a. Rezultat greške – ispis greške korisniku
3. Instanciranje proxy objekta za servis poslovne logike
4. Poziv metode web servisa
a. Provjera identiteta (Cookie)
b. Vračanje poruke o grešci
5. Klijent provjerava rezultat (greška ili validni podaci)
Za kraj, par stripova na temu ;) :