ASP.NET Identity Osnove

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

📖 Šta je ASP.NET Identity?

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.

Ključne Mogućnosti

  • Automatsko hashanje (kriptiranje) korisničkih šifri sa "Saltom".
  • Sistem za zaključavanje računa nakon neuspjelih pokušaja (Anti-Brute Force).
  • Sigurno resetovanje šifre pomoću generisanja vremenski ograničenih tokena.
  • Prilagodljiva Arhitektura (Dependency Injection spremnici).

🏗️ Arhitektura Identity Sistema

Cijeli Identity Namespace je pametno izoliran u tri glavna sloja kako bi se izbjeglo miješanje koda "Gdje" i "Kako":

  • 1. Menadžment Klasa: Klase poput UserManager obavljaju biznis logiku. Npr. UserManager komanduje: "Ne daj mu da promijeni šifru, prekratka je!". Zna pravila ali NE ZNA spremiti u bazu!
  • 2. Skladišno Mapiranje (Stores): Klasa UserStore samo prima izračunate objekte od UserManageru, prevodi ih u tablične formate i gura ih ka DB drajverima.
  • 3. Data Skladište: Fizička baza podataka vođena kroz Entity Framework koja čuva podatke.
1. Aplikacioni Sloj 2. Identity Managers 3. Identity Stores 4. SQL Baza AccountController UserManager RoleManager UserStore / RoleStore AspNetUsers / Roles

📦 Setup i Tabele Modela

Magične Tabele (Defaultne)

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

⚙️ Custom ApplicationUser: Proširivanje Modela

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;
    }
}

✅ Zaključak

  • ASP.NET Identity je robustan modul za sigurnosnu arhitekturu sa "Role i Claims" autorizacijom.
  • Odvojeni Slojevi (Menadžeri, Pravila i Logika) i EF Skladišta (Stores) daju programeru slobodu dizajniranja bez diranja niskog nivoa baze podataka.
  • ✅ Nasljeđivanje IdentityUser Klase na ApplicationUser dozvoljava beskonačno proširenje i ubacivanje poslovnih elemenata zaposlanih poput "JMBG" propertija.

📚 Sljedeća Lekcija

Prelazimo direktno na AccountController da kreiramo Action metode za Login/Register akcije sa zaštitnim Lockoutom!