Hitelesítési protokollok NestJS szemmel – OIDC, OAuth2, SAML2

A modern webalkalmazások egyik legkritikusabb része a hitelesítés és az autorizáció. Az alkalmazások közötti kommunikáció, a felhasználói fiókok védelme, valamint a biztonságos API-hozzáférés mind megköveteli, hogy szabványos protokollokra támaszkodjunk. NestJS-ben többféle lehetőségünk van ezek integrálására, hiszen a keretrendszer moduláris felépítése és a Passport.js integráció kiválóan illeszkedik a legtöbb megoldáshoz.

Ebben a cikkben áttekintjük a legelterjedtebb protokollokat – OIDC, OAuth2 és SAML2 –, és megnézzük, hogyan közelíthetők meg NestJS környezetben.


OAuth 2.0 – Az API-k kapuőre

OAuth 2.0 egy autorizációs protokoll, amely főleg erőforrásokhoz való hozzáférést szabályoz. Nem hitelesítésre találták ki, de gyakran így is használják. A legismertebb példák a "Bejelentkezés Google/Facebook fiókkal" típusú integrációk.

  • Fő elemei:

    • Authorization Server – kiadja a hozzáférési tokeneket

    • Resource Server – az erőforrást szolgáltató API

    • Client – az alkalmazás, amely a tokennel akar hozzáférni

    • Resource Owner – a felhasználó

  • Tipikus NestJS megoldás:

    • Használhatjuk a @nestjs/passport csomagot és egy OAuth2 stratégiát (pl. passport-google-oauth20, passport-github2).

    • A szerver az OAuth2 Provider (Google, GitHub, Auth0, Keycloak stb.) által kiadott access token-t fogja ellenőrizni.

    • A NestJS oldalon írhatsz egy JWT guardot vagy használhatod a meglévő Passport guardokat a token validálására.


OpenID Connect (OIDC) – A hitelesítés modern szabványa

OpenID Connect (OIDC) az OAuth2-re épül, de kiegészíti azt hitelesítési képességekkel. Nemcsak azt szabályozza, hogy valaki hozzáférhet-e az erőforráshoz, hanem azt is, hogy ki a felhasználó.

Az OIDC tokenek között található az ID Token (általában JWT formátumban), amely tartalmazza a felhasználó azonosító adatait.

  • Fő előnyei:

    • Széles körben támogatott (Google, Microsoft Azure AD, Keycloak, Auth0 stb.)

    • Könnyen illeszthető Single Sign-On (SSO) környezetbe

    • Modern, JSON/JWT-alapú megközelítés

  • Tipikus NestJS megoldás:

    • Használhatod az @nestjs/passport + passport-openidconnect vagy passport-azure-ad stratégiákat.

    • A visszatérő id_token-t egy JwtStrategy-vel dolgozhatod fel.

    • Ha enterprise környezetben vagy, gyakran Keycloak vagy Auth0 kerül elő, ahol az OIDC beállítása viszonylag egyszerű.


SAML 2.0 – A régi motoros

Security Assertion Markup Language (SAML 2.0) egy XML-alapú hitelesítési és autorizációs szabvány, amelyet gyakran vállalati környezetben (SSO, Active Directory, enterprise identity provider) használnak.

  • Jellemzői:

    • Az IdP (Identity Provider) ad ki egy XML-alapú "assertion"-t, ami igazolja, hogy a felhasználó ki ő.

    • Főleg Single Sign-On (SSO) megoldásokban elterjedt.

    • Nehézkesebb, mint az OIDC, de még mindig rengeteg vállalatnál kötelező.

  • Tipikus NestJS megoldás:

    • Léteznek passport-saml integrációk, amiket beépíthetsz egy NestJS modulba.

    • A SAML által küldött XML assertiont a stratégia validálja, majd NestJS oldalon a felhasználói session-t/jwt-t hozod létre.

    • Általában egy köztes réteget kell kialakítani: SAML → NestJS API → JWT a frontend felé.


NestJS integrációs minták

A NestJS legnagyobb előnye, hogy tisztán moduláris szerkezetben tudod kezelni a hitelesítést. Tipikus megoldás:

  1. AuthModule – tartalmazza a Passport stratégiákat, Guardokat, és az AuthService-t.

  2. Guards – pl. JwtAuthGuard, Oauth2Guard, SamlAuthGuard.

  3. Custom Decorators – pl. @CurrentUser() a requestből kinyert felhasználói objektumhoz.

  4. Strategy-k – különböző protokollokhoz:

    • JwtStrategy (OIDC és OAuth2 tokenekhez)

    • SamlStrategy (SAML assertion feldolgozására)

    • LocalStrategy (klasszikus email/jelszó auth-hoz)


Mikor melyiket?

  • OAuth2 – Ha csak API hozzáférést akarsz szabályozni, pl. harmadik fél kliensalkalmazásai.

  • OIDC – Ha modern, szabványos felhasználói hitelesítést és SSO-t szeretnél.

  • SAML2 – Ha régebbi vállalati környezethez kell integrálódni, különösen Active Directory vagy enterprise IdP esetén.


Összefoglalva:
NestJS-ben mindhárom protokoll könnyen illeszthető Passport stratégiákon keresztül. Ha új fejlesztést indítasz, az OIDC a legjobb választás, mert modern, jól támogatott, és egyszerre oldja meg a hitelesítést és az autorizációt.

Comments

Popular posts from this blog

RxJS Operátorok

Bevezetés az NgRx-be

ng-event-bus