RO EN

OAuth2 & OpenID Connect explicat clar

OAuth2 & OpenID Connect explicat clar
Doru Bulubasa
14 aprilie 2026

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:


🧠 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