Cum funcționează autentificarea modernă în aplicațiile .NET
Seria: Security by Design în .NET: De la JWT la Certificate-based Authentication
Dacă ai folosit:
-
Login cu Google
-
Login cu Microsoft
-
Identity Server
-
Keycloak
👉 atunci ai folosit OAuth2 sau OpenID Connect (probabil fără să știi exact cum funcționează).
🧠 Problema principală
Mulți cred:
OAuth2 = autentificare
❌ FALS
🔑 Ce este OAuth2
OAuth2 este:
🔐 un protocol de autorizare
Permite unei aplicații să acceseze resurse în numele unui user.
Exemplu simplu
„Login cu Google”
De fapt:
👉 aplicația ta cere acces la:
-
email
-
profil
Google spune:
„OK, dar doar dacă userul acceptă.”
Rezultatul
Primești:
{
"access_token": "abc123"
}
Acest token este folosit pentru:
✔ acces API
❌ NU pentru a ști cine este userul (corect)
🧠 Ce este OpenID Connect (OIDC)
OpenID Connect este:
🔑 un layer peste OAuth2 pentru autentificare
Adaugă conceptul de:
{
"id_token": "jwt_here"
}
ID Token
Este un JWT care conține:
{
"sub": "user123",
"email": "user@email.com",
"name": "John Doe"
}
👉 acesta îți spune cine este utilizatorul
⚔️ OAuth2 vs OpenID Connect
|
Caracteristică |
OAuth2 |
OpenID Connect |
|---|---|---|
|
Scop |
Autorizare |
Autentificare |
|
Token |
Access Token |
ID Token + Access Token |
|
User info |
❌ Nu garantat |
✔ Da |
|
JWT |
Nu obligatoriu |
Da (ID Token) |
🔁 Flow-ul principal: Authorization Code Flow
Pași:
1️⃣ User este redirectat către provider
2️⃣ Se autentifică
3️⃣ Primește un authorization code
4️⃣ Aplicația îl schimbă pentru:
-
access token
-
id token (OIDC)
🔐 PKCE (important în 2026)
PKCE protejează împotriva interceptării codului. Folosit în:
✔ SPA
✔ mobile apps
✔ Blazor WebAssembly
🧱 Cum se integrează în .NET
ASP.NET Core suportă nativ OIDC.
Exemplu:
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "https://your-identity-server";
options.ClientId = "client-id";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.SaveTokens = true;
});
🔗 Provideri comuni
Poți integra cu:
-
Google
-
Microsoft
🧠 Când ai nevoie de OAuth2 / OIDC
✔ aplicații enterprise
✔ login cu Google / Microsoft
✔ microservices
✔ SSO (Single Sign-On)
❌ Când NU ai nevoie
Dacă ai:
-
aplicație mică
-
login simplu
-
fără external providers
👉 poți folosi doar Identity + JWT
🚨 Greșeli frecvente
❌ folosirea OAuth2 pentru autentificare fără OIDC
❌ nevalidarea ID Token
❌ stocarea token-urilor nesigur
❌ lipsa PKCE
❌ folosirea implicit flow (deprecated)
🧱 Arhitectură modernă
Client (Blazor / SPA)
↓
OIDC Provider (Keycloak / IdentityServer)
↓
Access Token (API)
↓
Resource Server (ASP.NET Core API)
🔥 Best Practices
✔ Folosește Authorization Code Flow
✔ Activează PKCE
✔ Validează ID Token
✔ Nu expune access token în frontend
✔ Folosește HTTPS obligatoriu
✔ Configurează scopes corect
🎯 Concluzie
👉 OAuth2 = autorizare
👉 OpenID Connect = autentificare
Împreună formează:
🔐 standardul modern de autentificare în aplicațiile enterprise