Security / Authentication

    JWT, OAuth 2.0 i OIDC

    Autentykacja i autoryzacja w aplikacjach web — token-based auth, OAuth flows z PKCE, OpenID Connect i bezpieczeństwo tokenów.

    JWT
    Stateless token
    OAuth 2.0
    Delegacja dostępu
    OIDC
    Tożsamość + OAuth
    Passkeys
    Passwordless

    6 metod autentykacji porównane

    Session, JWT, OAuth 2.0, OIDC, SAML i Passkeys — każda metoda reprezentuje inny kompromis między bezpieczeństwem, skalowalnością i DX.

    Metoda Stanowe Rewokacja Skalowalność Cross-Domain Kiedy
    Session + Cookie Tak (DB/Redis) Natychmiastowa Wymaga shared store Trudne Tradycyjne web apps, jedna domena
    JWT (Bearer) Nie (stateless) Do exp (lub blacklist) Łatwe Łatwe Microservices, SPA + API, mobile
    OAuth 2.0 + PKCE Authorization Server U auth servera Zewnętrzny provider Tak (delegacja) Third-party login, delegacja dostępu
    OIDC Authorization Server U auth servera Zewnętrzny provider Tak (SSO) Enterprise SSO, Google/GitHub login
    SAML 2.0 IdP (XML) U IdP Zewnętrzny IdP Tak (enterprise) Enterprise legacy, ADFS, Okta
    Passkeys (WebAuthn) Device/Platform Per device Dobre Tak Passwordless, MFA, przyszłość

    Często zadawane pytania

    Co to jest JWT (JSON Web Token) i jak działa autentykacja?

    JWT (JSON Web Token): otwarty standard (RFC 7519) do przesyłania danych jako JSON object podpisany kryptograficznie. Struktura JWT: Header.Payload.Signature (oddzielone kropkami, base64url encoded). Header: algorytm (HS256, RS256, ES256) i typ (JWT). Payload (Claims): sub (subject/user ID), iss (issuer), aud (audience), exp (expiration), iat (issued at), custom claims. Signature: HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret). Jak działa: klient wysyła credentials. Serwer generuje JWT i zwraca. Klient przechowuje JWT (localStorage, cookie, memory). Klient wysyła JWT w każdym requeście: Authorization: Bearer {token}. Serwer weryfikuje podpis (bez bazy danych). Zalety JWT: stateless (brak sesji w DB). Skaluje się poziomo. Działa cross-domain. Samowystarczalny (dane w tokenie). Wady JWT: nie można unieważnić przed exp (bez blacklist). Większy rozmiar niż session ID. Sensitive data w payload (base64 nie jest encrypted!). exp zbyt długi = security risk. Access token (krótki TTL: 15min-1h) + Refresh token (długi TTL: 7-30 dni). Refresh token rotation: nowy refresh token przy każdym użyciu. Przechowywanie: HttpOnly cookie (bezpieczniejszy) vs localStorage (XSS risk).

    OAuth 2.0 — flows, grant types i kiedy używać?

    OAuth 2.0: framework autoryzacji (RFC 6749), nie autentykacji. Deleguje dostęp do zasobów bez udostępniania hasła. Aktorzy: Resource Owner (user), Client (aplikacja), Authorization Server (Google/GitHub), Resource Server (API). Grant Types: Authorization Code (+ PKCE): dla web apps i SPA. Redirect do auth server -> code -> exchange for tokens. Najbezpieczniejszy. Implicit: przestarzały (deprecated). Tylko dla SPA bez backendu. Nie używać. Client Credentials: serwis-do-serwisu (machine-to-machine). Brak user involvement. Device Code: TV, CLI tools bez przeglądarki. Resource Owner Password: przestarzały. Tylko legacy. PKCE (Proof Key for Code Exchange): rozszerzenie Authorization Code dla public clients (SPA, mobile). code_verifier (random string) + code_challenge (SHA256 hash). Zapobiega CSRF i authorization code interception. Scopes: granularne uprawnienia. openid, profile, email (OIDC). read:users, write:posts (custom). Tokens: Access Token (krótkoterminowy, dostęp do API). Refresh Token (długoterminowy, nowy access token). ID Token (OIDC — informacje o userze). OAuth vs autentykacja: OAuth = 'mogę...' (autoryzacja). Nie mówi kto jest user. OIDC = OAuth + autentykacja (who are you). Popularne OAuth providers: Google, GitHub, Microsoft, Facebook, Apple.

    OpenID Connect (OIDC) — tożsamość ponad OAuth 2.0?

    OIDC: protokół autentykacji zbudowany na OAuth 2.0 (2014). OAuth 2.0 + Identity Layer = OIDC. ID Token: JWT z danymi użytkownika. sub, name, email, picture, email_verified. Wydawany przez Authorization Server razem z Access Token. UserInfo Endpoint: GET /userinfo z Access Token. Zwraca profil użytkownika. Bardziej aktualne dane niż ID Token. Discovery: /.well-known/openid-configuration. Automatyczna konfiguracja klienta. Klucze publiczne do weryfikacji podpisów. Flows OIDC: Authorization Code (recommended). Implicit (deprecated). Hybrid. Kluczowe parametry: response_type=code, scope=openid profile email, nonce (anti-replay), state (CSRF protection). Claims: Standard (sub, name, email, phone, address, birthdate). Custom (role, tenant_id, plan). Rozszerzone: address, phone. OIDC vs SAML: OIDC — modern, JSON/JWT, REST, mobile/SPA-friendly. SAML 2.0 — enterprise legacy, XML, SSO dla starszych aplikacji. SAML nadal w enterprise (Okta, Azure AD, ADFS). Implementacje: Keycloak (open source, self-hosted). Auth0, Okta, Azure AD B2C (cloud). Supabase Auth, Clerk (developer-focused). Passport.js, openid-client (Node.js). Session vs JWT: Session — stateful, database lookup, HttpOnly cookie. JWT — stateless, no DB, Bearer token. Hybrydowe: session cookie zawierający JWT.

    Session-based auth vs JWT — kiedy co wybrać?

    Session-based authentication: serwer tworzy session ID po logowaniu. Session ID w cookie (HttpOnly, Secure, SameSite). Przy każdym requeście: sprawdź session w DB/Redis. Stan sesji w DB (session store). Zalety session: natychmiastowe unieważnienie (logout, ban). Mniejszy cookie (tylko ID). Server-side kontrola. Bezpieczniejszy out-of-the-box (HttpOnly cookie). Wady session: stateful — skalowanie wymaga shared session store (Redis). Każdy request = DB lookup. Trudniejsze w multi-domain. JWT authentication: token stateless. Weryfikacja kryptograficzna bez DB. Bearer token lub cookie. Zalety JWT: stateless (brak DB). Skalowanie łatwiejsze. Cross-domain. Microservices friendly. Wady JWT: brak natychmiastowego revocation. Payload widoczny (base64). Większy niż session ID. Implementacja revocation: short-lived access token + refresh token. Token blacklist (Redis) — niweluje zaletę stateless. Rekomendacja 2024: aplikacje web z jedną domeną -> session cookie (HttpOnly). SPA + API osobne domeny -> JWT (krótki TTL) + refresh token. Microservices -> JWT. Enterprise SSO -> OIDC/SAML. CSRF protection: session -> SameSite cookie lub CSRF token. JWT in cookie -> SameSite=Strict. JWT in Authorization header -> naturalnie odporny na CSRF.

    Bezpieczeństwo autentykacji — CSRF, XSS, token storage i best practices?

    XSS (Cross-Site Scripting): złośliwy JS może ukraść localStorage. localStorage — podatny na XSS (window.localStorage dostępny przez JS). Cookie HttpOnly — odporny (JS nie może czytać). Rekomendacja: tokeny w HttpOnly cookies. Jeśli localStorage — Content Security Policy (CSP) header. CSRF (Cross-Site Request Forgery): fałszywy request z innej domeny. Atakuje cookie (automatycznie wysyłane). Ochrona: SameSite=Strict lub Lax cookie. Double Submit Cookie pattern. CSRF token w formularzu. Authorization header (JWT) — odporny. SameSite cookie: Strict — tylko same-site (wyklucza cross-site linki). Lax — same-site + top-level navigation GET. None — wszystkie (wymaga Secure). Token rotation best practices: refresh token rotation (nowy refresh przy każdym użyciu). Wykrywanie reuse (replay attack). Revoke family przy wykryciu reuse. Token storage strategia: access token — memory (React state/closure). refresh token — HttpOnly cookie. PKCE — zawsze dla public clients (SPA, mobile). Rate limiting logowania: limit prób logowania. CAPTCHA po N nieudanych próbach. Account lockout. MFA (Multi-Factor Authentication): TOTP (Google Authenticator, Authy). WebAuthn/Passkeys (klucze sprzętowe, biometria). SMS OTP (mniej bezpieczny). Passkeys: W3C WebAuthn. Klucz kryptograficzny na urządzeniu. Phishing-resistant. Coraz popularniejsze (Apple, Google, Microsoft).

    Czytaj dalej

    Powiązane artykuły

    Kontakt

    Skontaktuj się z nami

    Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

    Wyślij zapytanie

    Bezpłatna wycena w 24h
    Bez zobowiązań
    Indywidualne podejście
    Ekspresowa realizacja

    Telefon

    +48 790 814 814

    Pon-Pt: 9:00 - 18:00

    Email

    adam@fotz.pl

    Odpowiadamy w ciągu 24h

    Adres

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

    Pon - Pt9:00 - 18:00
    Sob - NdzZamknięte

    Wolisz porozmawiać?

    Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

    Zadzwoń teraz