OAuth 2.0 – Authorization Code Flow
OAuth ist kein Verschlüsselungsverfahren, sondern ein Protokoll für delegierte Autorisierung. Es löst die Frage: „Wie kann eine App in meinem Namen auf meine Daten bei einem anderen Dienst zugreifen – ohne dass ich der App mein Passwort gebe?“
Die vier Rollen:
- Resource Owner – du, der Nutzer
- Client – die App, die Zugriff will
- Authorization Server – stellt Tokens aus (z. B. Google)
- Resource Server – hält die Daten (z. B. Google API)
1
Nutzer klickt 'Login mit Google'
👤 Nutzer → 🌐 App (Client)
Der Nutzer möchte sich bei einer App anmelden, ohne dort sein Google-Passwort einzugeben.
2
App leitet zum Authorization Server weiter
🌐 App → 🔐 Authorization Server (Google)
Die App schickt den Browser zu Google – mit client_id, redirect_uri, scope und state.
3
Nutzer loggt sich bei Google ein & stimmt zu
👤 Nutzer → 🔐 Google
Google authentifiziert den Nutzer (Passwort, 2FA) und zeigt den Consent-Screen: 'App XY möchte Zugriff auf Profil und E-Mail – erlauben?'
4
Google schickt Authorization Code zurück
🔐 Google → 🌐 App
Über den Browser-Redirect erhält die App einen kurzlebigen Code. Der Code allein reicht noch nicht – er muss erst gegen ein Token getauscht werden.
5
App tauscht Code gegen Access Token
🌐 App-Backend → 🔐 Google
Direkt von Server zu Server (nicht über den Browser!) – mit client_secret. Das ist der entscheidende Schritt: niemand außer der App kann diesen Tausch machen.
6
Google antwortet mit Access Token (+ Refresh Token)
🔐 Google → 🌐 App
Access Token ist meist ein JWT, gültig z. B. 1 Stunde. Refresh Token kann später ein neues Access Token holen, ohne dass der Nutzer wieder klicken muss.
7
App ruft mit Token die Daten ab
🌐 App → 📦 Resource Server (Google API)
Das Access Token wird im Authorization-Header mitgeschickt. Der Resource Server prüft das Token und liefert die Daten.
Warum nicht einfach Passwort weitergeben?
- Die App müsste das Klartext-Passwort speichern – riesiges Risiko.
- Der Nutzer könnte den Zugriff nicht gezielt für eine App widerrufen, ohne überall das Passwort zu ändern.
- Keine Beschränkung auf Teilrechte (Scopes): „nur lesen“, „nur Profil“ etc.
- Kein 2FA möglich, da die App selbst einloggen müsste.
Wichtige Begriffe
- Access Token
- Kurzlebig, wird bei jedem API-Aufruf mitgeschickt. Oft JWT.
- Refresh Token
- Langlebig, holt neue Access Tokens ohne erneutes Login.
- Scope
- Definiert, was die App darf (z. B. „read:email“).
- state
- Zufallswert gegen CSRF-Angriffe – muss zurückkommen wie geschickt.
- PKCE
- Erweiterung für native/SPA-Clients ohne client_secret.
OAuth ≠ OpenID Connect. OAuth regelt nur die Autorisierung („darf die App das?“). Wenn du wissen willst wer der Nutzer ist, nutzt man OpenID Connect – eine OAuth-Erweiterung mit einem zusätzlichen
id_token (signiertes JWT mit Nutzerinfos).