OAuth

Standard autoryzacji pozwalający aplikacji uzyskać dostęp do danych użytkownika w innym serwisie bez poznawania jego hasła. Stoi za logowaniem przez Google czy Facebooka.

OAuth (Open Authorization) to otwarty standard autoryzacji, który pozwala jednej aplikacji uzyskać ograniczony dostęp do Twoich danych w innym serwisie — bez podawania jej Twojego hasła. To właśnie ten mechanizm stoi za przyciskami w stylu „Zaloguj się przez Google” czy „Połącz z GitHubem”. Zamiast hasła aplikacja dostaje access_token z dokładnie określonym zakresem uprawnień i czasem ważności. W praktyce mówimy dziś o OAuth 2.0 (RFC 6749 z 2012 r.) — starszy OAuth 1.0 to już muzeum.

Jak to działa

Kluczowe rozróżnienie: OAuth to autoryzacja (co aplikacja może zrobić), a nie uwierzytelnianie (kto Ty jesteś). W grze są cztery role: resource owner (Ty), client (aplikacja, której chcesz coś pozwolić), authorization server (np. Google, który wydaje tokeny) i resource server (API z Twoimi danymi).

Najczęstszy scenariusz to Authorization Code Flow: aplikacja przekierowuje Cię do serwera autoryzacji, Ty się logujesz i klikasz „Zgadzam się”, a w zamian aplikacja dostaje krótkotrwały code, który wymienia po stronie serwera na access_token (i zwykle refresh_token). Token wędruje potem w nagłówku każdego żądania do API. Dla aplikacji publicznych (SPA, mobile) stosuje się rozszerzenie PKCE, które domyka dziurę z przechwyceniem kodu.

Przykład z praktyki

Łączysz aplikację z API GitHuba. Po wymianie kodu na token odpytujesz endpoint, dorzucając token w nagłówku:

curl -H "Authorization: Bearer ghp_TwojToken" https://api.github.com/user

W odpowiedzi dostajesz dane konta — ale tylko w zakresie (scope), na który wyraziłeś zgodę, np. read:user. Jeśli aplikacja zechce więcej, GitHub znów zapyta Cię o pozwolenie.

Częste błędy i mity

  • Mit „OAuth to logowanie”. Sam OAuth nie mówi aplikacji, kim jesteś. Od logowania jest OpenID Connect — warstwa nad OAuth 2.0, która dorzuca id_token (JWT z tożsamością).
  • Token w URL-u. Nie wrzucaj access_token do query stringa ani do logów — wycieka jak nic.
  • Implicit Flow. Stary flow zwracający token w URL jest dziś odradzany — używaj Authorization Code z PKCE.
  • Brak walidacji redirect_uri i state — otwiera drogę do open redirect i ataków CSRF.

Pojęcia powiązane: OpenID Connect, JWT, access token i refresh token, scope, PKCE, Bearer token, SSO oraz Single Sign-On przez dostawców tożsamości (Google, Microsoft Entra ID, Auth0).