Modul 7 - Lekcija 1
Arhitektura, instalacija i prilagođavanje Identity sistema za e-Upravu
⏱️ Trajanje: ~3.5 časa | 📚 Nivo: Srednji/Napredni | 🎯 Praktični primjeri: 5
ASP.NET Identity je robustan i zvaničan framework usklađen s ASP.NET MVC-om i OWIN standardima za upravljanje korisničkim nalozima.
Njegova najveća snaga u odnosu na starije protokole (ASP.NET Membership) ogleda se u modernom "Token-based" i "Claims-based" sistemu logiranja koji jednostavno uveže externe servise (Google Login) i vlastitu internu bazu radnika.
Cijeli Identity Namespace je pametno izoliran u tri glavna sloja kako bi se izbjeglo miješanje koda "Gdje" i "Kako":
UserManager obavljaju biznis
logiku. Npr. UserManager komanduje: "Ne daj mu da promijeni šifru, prekratka je!". Zna
pravila ali NE ZNA spremiti u bazu!UserStore samo prima
izračunate objekte od UserManageru, prevodi ih u tablične formate i gura ih ka DB
drajverima.
Kada prvi put migrirate aplikaciju koja posjeduje navedeni Identity paket EntityFramework
automatski
dizajnira 5 relacijskih zaštitnih tabela u SQL serveru: AspNetUsers,
AspNetRoles, AspNetUserRoles, AspNetUserClaims i
AspNetUserLogins.
// Ukoliko integrišete Identity naknadno u goli prazan MVC projekat, trebate Instalaciju iz nugeta:
PM> Install-Package Microsoft.AspNet.Identity.EntityFramework
PM> Install-Package Microsoft.AspNet.Identity.Owin
Originalna Identityjeva Klasa posjeduje samo osnove Email, UserName, PasswordHash.
Da bi naš portal pratio specifičnog korisnika mi ćemo kreirati klasu ApplicationUser
koja nasljeđuje jezgru i obogaćuje se našim novim specifikacijama!
public class ApplicationUser : IdentityUser
{
// NAŠA DOMENSKA POLJA KOJA APLICIRAMO NA GORNJEOG KORISNIKA
[Required]
[StringLength(50)]
public string Ime { get; set; }
[Required]
[StringLength(50)]
public string Prezime { get; set; }
[Required]
[StringLength(13)]
public string JMBG { get; set; } // Zavisno od specifikacije registra građenina
public int? SektorRadaId { get; set; } // Opcionalna Veza sa Biznis Entitetom Sektor
// OBAVEZNA METODA Identity standarda u klasi (Priprema Claimova poslije uspješnog login-a)
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> mgr)
{
var uid = await mgr.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Cijeli JMBG je isprinte direktno unutar sigurnosnog Cookie fajla kod klijenta!
uid.AddClaim(new Claim("JMBG", this.JMBG));
return uid;
}
}
IdentityUser Klase na ApplicationUser dozvoljava
beskonačno proširenje i ubacivanje poslovnih elemenata zaposlanih poput "JMBG" propertija.Prelazimo direktno na AccountController da kreiramo Action metode za Login/Register akcije sa zaštitnim Lockoutom!