MODUL 7 - LEKCIJA 1

ASP.NET Identity Osnove

Arhitektura, instalacija i prilagođavanje Identity sistema za potrebe javne uprave

⏱️ Trajanje: ~3.5 časa 📚 Nivo: Srednji do Napredni 🎯 Praktični primjeri: 5

📖 Š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:

1. Aplikacioni Sloj 2. Identity Managers 3. Identity Stores (EF) 4. SQL Server Baza AccountController / ManageController UserManager SignInManager RoleManager UserStore<T> RoleStore<T> AspNetUsers / AspNetRoles / itd...

📦 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:

🛠️ NuGet Paket
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.

🛠️ ApplicationUser
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.