📖 Šta je ASP.NET Identity?
ASP.NET Identity je robustan, proširiv sistem (framework) za upravljanje korisnicima, ulogama, lozinkama, profilima, te autentifikaciju (prijava) i autorizaciju (dozvole pristupanja određenim resursima). Zamijenio je starije sisteme kao što su ASP.NET Membership i Simple Membership, donoseći punu podršku za OWIN (Open Web Interface for .NET) i eksterne logine (Google, Facebook).
🏗️ Arhitektura Identity Sistema
Identity sistem je pametno podijeljen u tri glavna sloja kako bi bio maksimalno fleksibilan:
- Managers (Logika): Klase tipa
UserManageriRoleManager. Sadrže poslovnu logiku (npr. "kako provjeriti dužinu lozinke", "kako zaključati korisnika nakon 5 grešaka"). - Stores (Pristup podacima): Klase tipa
UserStore. One komuniciraju sa bazom podataka u ime Managera. Manager ne zna gdje su podaci, on pita Store. - Database (Skladište): Najčešće Entity Framework, koji podatke čuva u SQL Serveru.
📦 Instalacija i Integracija
Ako ste odabrali "Individual User Accounts" prilikom kreiranja MVC projekta, Entity Framework vezan za Identity već je instaliran. Ukoliko dodajete u postojeći, prazan projekat, paket je:
PM> Install-Package Microsoft.AspNet.Identity.EntityFramework
Generisane Tabele
Nakon pokretanja prve forme i kreiranja korisnika, EF kreira tabele: AspNetUsers,
AspNetRoles, AspNetUserRoles, AspNetUserClaims i
AspNetUserLogins. Većina vas će samo direktno referencirati "AspNetUsers".
⚙️ ApplicationUser: Obogaćivanje Profila za Javnu Upravu
Osnovni IdentityUser sadrži samo ID, Email, PhoneNumber i PasswordHash. U državnim
aplikacijama ovo nije dovoljno. Model se nasljeđuje kroz klasu ApplicationUser, koja se
tradicionalno nalazi u pogledu Models/IdentityModels.cs.
public class ApplicationUser : IdentityUser
{
// Obogaćujemo standardnog korisnika prilagođenim svojstvima
[Required]
[StringLength(50)]
public string Ime { get; set; }
[Required]
[StringLength(50)]
public string Prezime { get; set; }
[Required]
[StringLength(13)]
public string JMBG { get; set; } // Ovdje hvatamo vezu sa registrima državnih službenika
public int? OrganizacionaJedinicaId { get; set; } // Veza sa Sektorom
public DateTime DatumZaposlenja { get; set; }
public bool PrivremenoSuspendovan { get; set; }
// Obavezna metoda za konfiguraciju claim-ova (Identity generisanje)
public async Task GenerateUserIdentityAsync(UserManager manager)
{
// Ne zaboravite izgenerisati ClaimsIdentity
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Možemo dodati vlastite "Claim-ove" (Osobine) direktno u kolačić da ih ne čitamo stalno iz baze!
userIdentity.AddClaim(new Claim("JMBG", this.JMBG));
userIdentity.AddClaim(new Claim("OsnovnoIme", this.Ime));
return userIdentity;
}
}
Nakon svake promjene ApplicationUser klase, obavezno pokrenite Add-Migration
proces! EntityFramework će detektovati vaša dodana polja i dodati kolone kao što su
Ime, JMBG direktno u AspNetUsers tabelu aplikacije.
✅ Zaključak
ASP.NET Identity obezbjeđuje čvrstu okosnicu sigurnosti i modularnu arhitekturu sa menadžerskim i storage slojem zaduženim za sve aspekte upravljanja nalozima. Njegova prava moć leži u jednostavnosti proširenja, gdje je preporuka da svaku aplikaciju započnete nadopunom originalnog modela u skladu s potrebama preduzeća.