USERCLIENTIdP (Google)APIconsentcode → tokenscoped access

OAuth 2.0

11 min přečtenoWebová technologie

Každé tlačítko „Přihlásit se přes Google“, každý odkaz „Připojte svůj účet Twitter“, každá integrace API mezi moderními službami funguje na OAuth. Protokol nahrazuje sdílení hesel tokem tokenů a obrazovek souhlasu a pochopení pohyblivých částí demystifikuje kategorii útoků a vymožeností obojí.

Celé tělo článku je uvedeno níže v angličtině.

OAuth 2.0 je autorizační rámec, který umožňuje jedné aplikaci získat omezený přístup ke zdrojům jiné aplikace jménem uživatele – aniž by kdy viděla heslo uživatele. Klasický případ použití: aplikace kalendáře, která potřebuje číst váš Kalendář Google, by po vás neměla vyžadovat zadání hesla Google. OAuth vám umožňuje místo toho udělit aplikaci token s rozsahem, který lze odvolat.

Aktéři

Čtyři role v toku OAuth:

  • Vlastník zdroje – vy, uživatel s daty, která někde chceXPLZ15PLX PLX aplikace, která někde chceXPLZ15PLXX14 přístup (např. prohlížeč kalendáře třetí strany)
  • Autorizační server – služba, která vás ověřuje a vydává tokeny (např. koncový bod OAuth společnosti Google)
  • Zdrojový server společnosti Google. API)

Tok autorizačního kódu

Standardní tok na straně serveru, zjednodušeně:

  1. Klikněte na „Připojit Kalendář Google“ v klientské aplikaci.
  2. Klient přesměruje váš server autorizace, parametry_uri_id přesměrování na prohlížeč Google: (calendar.read), stav (token CSRF).
  3. Ověříte se u Googlu, pokud ještě nejste přihlášeni.
  4. Google vám zobrazí obrazovku souhlasu: „CalendarViewer chce číst váš kalendář. Povolit?“
  5. Kliknete na Povolit. Google přesměruje váš prohlížeč zpět na redirect_uri klienta pomocí jednorázového autorizačního kódu.
  6. Klientský kód na straně serveru vymění autorizační kód (a jeho tajný klíč klienta) za přístupový token přímým voláním koncového bodu tokenu Google.
  7. Klient používá přístupový token k volání přístupového rozhraní API Kalendáře Google na4ZPLXX ve vašem zastoupení44XXX, až vaším jménem vyprší. (obvykle hodinu), klient použije obnovovací token, aby získal nový, aniž by vás obtěžoval.

Zásadní bezpečnostní vlastnost: vaše heslo se nikdy nedotkne klientské aplikace. Klient získá token s rozsahem, který můžete kdykoli odvolat na hlavním panelu účtu Google.

OAuth 2.0 vs OAuth 2.1 vs OIDC

  • OAuth 2.0 je standard R67 Od té doby bylo přidáno několik rozšiřujících RFC a dokumentů o osvědčených postupech.
  • OAuth 2.1 (v návrhu od roku 2026) konsoliduje současné osvědčené postupy do jediné specifikace – povinné PKCE, odstraněný implicitní tok atd.
  • XPLZXZO63XPZ6 je identita Connect vrstva nad OAuth 2.0. Samotné OAuth poskytuje neprůhledný přístupový token; OIDC přidá ID token (JWT), který ověřuje uživatele. Většina tlačítek „Přihlásit se pomocí...“ používá OIDC, nikoli prosté OAuth.

Typy udělení

OAuth 2.0 definuje několik toků pro různé scénáře:

  • XPL standardní kód na straně serveru, tok na straně serveruX. S rozšířením PKCE, které používají také mobilní aplikace a aplikace SPA.
  • Implicit Flow (zastaralé) – vydané přístupové tokeny přímo prostřednictvím fragmentu adresy URL. Zranitelný únikem tokenu; nahrazen Authorization Code + PKCE.
  • Resource Owner Password Credentials (zřídka používané) — klient shromáždí heslo uživatele a vymění ho za token. Mělo by být použito pouze ve starších scénářích migrace.
  • Client Credentials — pro stroj-stroj, kde není žádný uživatel. Klient se ověří a získá token pro své vlastní zdroje.
  • Device Code — pro zařízení bez prohlížečů (televizory, IoT). Zařízení zobrazí kód; uživatel autorizuje z telefonu nebo notebooku.
  • Refresh Token — vymění dlouhotrvající obnovovací token za nový přístupový token bez zásahu uživatele.

PKCE: nezbytné rozšíření PLXPLZ97ZX99Pro PKEX0Kód pro kód Exchange, vyslovované jako "pixie"), zabraňuje útokům zachycujícím autorizační kód. Klient vygeneruje náhodný tajný klíč, zahašuje jej a odešle hash v žádosti o autorizaci. Při výměně kódu odešle původní tajenku. Autorizační server ověří shody hashů. Žádný útočník, který zachytí kód, jej nemůže vyměnit bez původního tajemství.

PKCE je nyní považováno za povinné pro všechny klienty OAuth — veřejné (prohlížeč, mobilní zařízení) i důvěrné (na straně serveru) podobně.

Scopes

Tokeny jsou vydávány se specifickými rozsahy – akcemi, které mohou provádět. Typické rozsahy Google vypadají jako https://www.googleapis.com/auth/calendar.readonly. Klient požaduje rozsahy; uživatel je uvidí na obrazovce souhlasu a schválí nebo odmítne. Princip nejmenšího oprávnění: požádejte pouze o rozsahy, které skutečně potřebujete.

Běžné útoky OAuth

  • Otevřené přesměrování. Špatně nakonfigurovaný parametr redirect_uri umožňuje útočníkovi přesměrovat autorizační kód na jejich vlastní server.XPLZ11Z143XXX aXPL bez hodnoty stavu vázané na uživatelskou relaci jsou toky OAuth zranitelné vůči CSRF – útočník přiměje oběť, aby dokončila tok OAuth, který propojí účet útočníka s relací oběti. XSS. Pokud klientská aplikace ukládá tokeny do localStorage a má nějakou zranitelnost XSS, útočníci je mohou ukrást.
  • Phishing obrazovky souhlasu. Útočník zaregistruje škodlivého klienta OAuth, který žádá o citlivé rozsahy; uživatel, který musí kliknout na „Povolit“ na obrazovkách souhlasu, uděluje přístup bez kontroly.

Co dělat jako uživatel

  • Pravidelně kontrolujte připojené aplikace v nastavení účtu Google/Apple/Microsoft/Facebook/GitHub. Zrušte ty, které nepoužíváte.
  • Před udělením přístupu si přečtěte rozsahy obrazovky souhlasu. „Spravovat svůj kalendář“ se liší od „Zobrazit kalendář.“
  • Buďte skeptičtí k požadavkům OAuth z aplikací, které nepoznáváte, i když se objeví během známého pracovního postupu.

Často kladené otázky

Je OAuth totéž jako ověřování?
Ne. OAuth je autorizace – uděluje klientovi oprávnění k přístupu ke zdrojům. OpenID Connect, postavený na OAuth, přidává ověřování. „Přihlásit se přes Google“ je OIDC; „Připojit Kalendář Google“ může být buď v závislosti na tom, zda aplikace potřebuje vědět, kdo jste, nebo jen potřebuje přístup k vašim datům.
Mám používat OAuth nebo ukládat hesla?
Používejte OAuth všude, kde je to možné. Ukládání uživatelských hesel znamená zdědění veškeré odpovědnosti za hašování, sůl, reakci na porušení, obnovu hesla a 2FA. Delegování na Google/Apple/Microsoft/GitHub přes OAuth to vše snižuje. Kompromisem je, že vaši uživatelé potřebují účty u těchto poskytovatelů.
Proč lze tokeny OAuth odvolat, ale hesla ne?
Tokeny odkazují na záznam v databázi autorizačního serveru. Odvolání záznamu okamžitě zneplatní token. Hesla jsou znalostní – můžete heslo otočit a vynutit si opětovné ověření, ale staré heslo zůstane platné, dokud to neuděláte.
Jaký je rozdíl mezi OAuth 2.0 a OAuth 1.0?
OAuth 1.0 (2007) používal kryptografické podpisy u každého požadavku. OAuth 2.0 (2012) spoléhá na TLS pro zabezpečení dopravy a používá tokeny nosiče. OAuth 2.0 je jednodušší na implementaci a dodává se téměř v každém moderním API; OAuth 1.0 je v podstatě zastaralý.
Jsou tokeny OAuth v případě úniku nebezpečné?
Ano – kdokoli s tokenem má udělený přístup, dokud jeho platnost nevyprší nebo nebude zrušena. Omezení: krátká životnost přístupových tokenů (typicky 1 hodina), bezpečněji uložené obnovovací tokeny, minimalizace rozsahu, protokolování auditu. S přístupovými tokeny zacházejte po dobu jejich platnosti stejně opatrně jako s hesly.
Vysvětlení protokolu OAuth 2.0: Jak vlastně funguje „Přihlášení přes Google“.