OAuth 2.0 ist ein branchenübliches Autorisierungsprotokoll, das Drittanwendungen eingeschränkten Zugriff auf die Ressourcen eines Benutzers gewährt, ohne dessen Anmeldeinformationen weiterzugeben. Das Protokoll ist zum De-facto-Standard für delegierte Autorisierung in Web- und Mobilanwendungen geworden und wird von Plattformen wie Google, Facebook, Apple und GitHub verwendet. Laut IETF RFC 6749 (2025) wird OAuth 2.0 in über 85 % aller API-Integrationen verwendet, die einen delegierten Datenzugriff erfordern.
Wichtige Erkenntnisse
OAuth 2.0 ist ein in IETF RFC 6749 definiertes Autorisierungsprotokoll, das Drittanwendungen eingeschränkten Zugriff auf die Ressourcen eines Benutzers ermöglicht, ohne dessen Benutzernamen und Passwort preiszugeben. Das Protokoll löst ein grundlegendes Problem des Passwortmodells: Eine Anwendung, der Sie Ihr Passwort anvertrauen, erhält uneingeschränkten Zugriff auf alle Kontodaten. OAuth 2.0 ersetzt diesen Ansatz durch die Ausstellung eines temporären Tokens mit einem explizit eingeschränkten Zugriffsbereich.
Die Architektur von OAuth 2.0 ist die delegierte Autorisierung. Der Benutzer (Resource Owner) autorisiert eine Anwendung (Client) zum Zugriff auf seine auf einem Ressourcenserver (Resource Server) gespeicherten Daten über einen Vermittler: den Autorisierungsserver (Authorization Server). Der Autorisierungsserver stellt einen Access Token aus – eine kryptografische Zeichenfolge, die die Anwendung dem Ressourcenserver vorlegt, um auf Daten zuzugreifen. Ein wichtiger Unterschied zwischen OAuth 2.0 und SAML oder OpenID Connect: OAuth 2.0 löst die Autorisierungsaufgabe (was ist erlaubt), nicht die Authentifizierung (wer ist der Benutzer). Für die Authentifizierung auf OAuth 2.0 wird das OpenID Connect (OIDC)-Protokoll aufgebaut.
Das Protokoll wird von allen großen Plattformen unterstützt. Google verwendet OAuth 2.0 für den Zugriff auf Google APIs (Gmail, Drive, Calendar), Facebook für die Graph API, Apple für Sign in with Apple (ASAuthorizationAppleIDProvider) und GitHub für den Repository-Zugriff. Im Kontext der mobilen Entwicklung ist OAuth 2.0 der Standardmechanismus zur Integration von Drittanbieterdiensten: Login über soziale Netzwerke, Zugriff auf Cloud-Speicher und Veröffentlichung von Inhalten im Namen des Benutzers.
Das OAuth 2.0-Protokoll definiert vier Rollen, deren Zusammenspiel den vollständigen Autorisierungszyklus bildet. Das Verständnis jeder Rolle ist für die korrekte Implementierung des Protokolls in einer mobilen Anwendung unerlässlich.
| Rolle | Beschreibung | Beispiel |
|---|---|---|
| Resource Owner | Der Dateninhaber – der Benutzer, der den Zugriff auf seine Ressourcen gewährt | Ein Anwendungsbenutzer, der auf „Mit Google anmelden“ klickt |
| Client | Die Anwendung, die im Namen des Inhabers Zugriff auf Ressourcen anfordert | Eine mobile App, die Zugriff auf Google Drive benötigt |
| Authorization Server | Der Server, der nach Authentifizierung und Autorisierung Tokens ausstellt | accounts.google.com – der Autorisierungsserver von Google |
| Resource Server | Die API, die über einen Token Zugriff auf geschützte Ressourcen gewährt | www.googleapis.com – der Ressourcenserver der Google Drive API |
Die Schlüsselelemente des Protokolls sind der Access Token, der Refresh Token und der Authorization Code. Der Access Token ist ein kurzlebiger Token (normalerweise 15–60 Minuten), der bei jeder Datenanfrage dem Ressourcenserver vorgelegt wird. Der Refresh Token ist ein langlebiger Token (Tage oder Wochen), der verwendet wird, um einen neuen Access Token zu erhalten, ohne dass sich der Benutzer erneut anmelden muss. Der Authorization Code ist ein temporärer Code, der nach der Benutzerautorisierung ausgestellt und gegen einen Access Token und Refresh Token eingetauscht wird.
OAuth 2.0 definiert mehrere Grant Types – Token-Erhaltsszenarien, die jeweils für einen bestimmten Client-Typ und Sicherheitskontext ausgelegt sind. Die Wahl des richtigen Grant Types ist eine kritische Architekturentscheidung beim Entwurf der Autorisierung in einer mobilen Anwendung.
Die wichtigsten Grant Types sind: Authorization Code (der sicherste für mobile und Webanwendungen mit einer Serverkomponente), Authorization Code mit PKCE (Proof Key for Code Exchange – für mobile und SPA-Anwendungen ohne Server-Backend), Client Credentials (für Server-zu-Server-Authentifizierung ohne Benutzerbeteiligung) und Resource Owner Password Credentials (veraltet – überträgt das Passwort direkt). PKCE ist eine obligatorische Erweiterung für öffentliche Clients (mobile Anwendungen, SPAs) gemäß den Empfehlungen des OAuth Security BCP (RFC 9700).
Authorization Code Flow mit PKCE ist die empfohlene OAuth 2.0-Konfiguration für native mobile Anwendungen. PKCE (Proof Key for Code Exchange) fügt eine zusätzliche Schutzschicht hinzu, die Angriffe durch das Abfangen von authorization codes verhindert. Das Protokoll ist in IETF RFC 7636 beschrieben.
Die Schritte im Ablauf: (1) Der Client generiert einen zufälligen code_verifier (eine Zeichenfolge von 43–128 Zeichen, die nur nicht reservierte Zeichen verwendet), (2) der Client berechnet code_challenge = SHA-256(code_verifier), (3) der Client öffnet einen Browser zur Benutzerautorisierung auf dem Authorization Server und übergibt code_challenge, (4) nach erfolgreicher Autorisierung gibt der Server den authorization code über ein benutzerdefiniertes URI-Schema (App-Deep-Link) an die Anwendung zurück, (5) der Client sendet authorization code + code_verifier an den Server, (6) der Server überprüft SHA-256(code_verifier) === code_challenge und stellt einen Access Token + Refresh Token aus.
Der Vorteil von PKCE: Selbst wenn ein Angreifer den authorization code im URI-Schema abfängt, kann er ihn ohne den code_verifier, der nur dem legitimen Client bekannt ist, nicht gegen einen Token eintauschen. In mobilen Anwendungen sollten zum Öffnen des Browsers Chrome Custom Tabs (Android) oder ASWebAuthenticationSession (iOS) verwendet werden – dies stellt sicher, dass der Systembrowser nicht auf den code_verifier aus dem Speicher der Anwendung zugreifen kann.
AppAuth ist die Referenzimplementierung von OAuth 2.0 und OpenID Connect für native Anwendungen, empfohlen von der IETF. Die Bibliothek unterstützt PKCE, Chrome Custom Tabs, benutzerdefinierte URI-Schemata für die Rückgabe des authorization codes und automatische Token-Aktualisierung. AppAuth für Android ist über die Abhängigkeit `net.openid:appauth:0.11.1` verfügbar.
val serviceConfig = AuthorizationServiceConfiguration.fromUrl(
Uri.parse("https://accounts.google.com/.well-known/openid-configuration")
)
val request = AuthorizationRequest.Builder(
serviceConfig,
"CLIENT_ID.apps.googleusercontent.com",
ResponseTypeValues.CODE,
Uri.parse("com.example.app:/oauth2callback")
)
.setScope("openid profile email")
.setCodeVerifier(
CodeVerifierUtil.generateRandomCodeVerifier()
)
.build()
val authService = AuthorizationService(context)
val intent = authService.getAuthorizationRequestIntent(request)
// Chrome Custom Tab zur Autorisierung starten
startActivityForResult(intent, REQUEST_CODE_AUTH)
Nach dem Erhalt des authorization codes (onActivityResult) tauscht die Anwendung ihn über einen TokenRequest gegen einen Access Token und Refresh Token aus. Die Tokens werden in SharedPreferences mit Verschlüsselung über EncryptedSharedPreferences (Android Security Crypto) gespeichert. Der Refresh Token sollte im KeyStore gespeichert werden – einem hardwarebasierten Schlüsselspeicher, der für andere Anwendungen nicht zugänglich ist. Bei jedem Ablauf des Access Tokens verwendet die Anwendung den Refresh Token, um einen neuen zu erhalten – der Benutzer muss sich nicht erneut authentifizieren.
// Authorization Code gegen Tokens eintauschen
val data = intent?.data ?: return
val resp = AuthorizationResponse.fromIntent(data)
val exchangeReq = resp?.createTokenExchangeRequest()
?: return
authService.performTokenRequest(
exchangeReq,
ClientAuthentication.none()
) { tokenResp, ex ->
if (tokenResp != null) {
// Access Token und Refresh Token erhalten
val accessToken = tokenResp.accessToken
val refreshToken = tokenResp.refreshToken
// In EncryptedSharedPreferences speichern
saveTokens(accessToken, refreshToken)
}
}
Der obige Code demonstriert den vollständigen OAuth 2.0-Ablauf mit PKCE: Erstellung der Serverkonfiguration über OpenID Connect Discovery, Generierung einer Autorisierungsanfrage mit code_verifier, Start von Chrome Custom Tab, Empfang des authorization codes über ein benutzerdefiniertes URI-Schema und Austausch des Codes gegen Tokens über einen Token Request. Es ist wichtig, den Ablauf des Access Tokens zu behandeln: Beim Erhalt einer HTTP-401-Antwort vom Resource Server sollte die Anwendung den Refresh Token verwenden, um einen neuen Access Token zu erhalten, und die Anfrage erneut ausführen.
OAuth 2.0 ist ein komplexes Protokoll mit vielen Angriffsvektoren. Das IETF Security BCP (RFC 9700) beschreibt über 20 Klassen von OAuth 2.0-Schwachstellen. Für mobile Anwendungen sind die kritischsten: Abfangen von authorization codes über benutzerdefinierte URI-Schemata, CSRF-Angriffe auf Callback-Endpunkte, Diebstahl von Refresh Tokens aus unsicheren Speichern und Client-Identitätsdiebstahl durch Intent-Abfangen.
Der Schutz vor diesen Angriffen umfasst obligatorische Maßnahmen: (1) PKCE mit S256 code_challenge – verhindert das Abfangen von authorization codes selbst bei Abfangen des URI-Schemas; (2) Verwendung eines nonce- oder state-Parameters zur Verhinderung von CSRF – der Server überprüft, ob der authorization code der ursprünglichen Anfrage entspricht; (3) Speicherung des Refresh Tokens nur im KeyStore (Android) oder Keychain (iOS) – niemals in SharedPreferences oder UserDefaults; (4) Verwendung von TLS mit Certificate Pinning zum Schutz vor MITM auf der Transportschicht; (5) Validierung der redirect_uri – der Autorisierungsserver muss streng auf Übereinstimmung mit der registrierten URI prüfen.
Zusätzliche Empfehlungen der IETF: Mobile Anwendungen sollten AppAuth oder ähnliche Bibliotheken verwenden, die Sicherheitsaudits durchlaufen haben; sich nicht auf WebView für OAuth verlassen (WebView isoliert Daten nicht von der Hauptanwendung); automatische Refresh-Token-Rotation implementieren (jeder Refresh Token kann nur einmal verwendet werden); Certificate Pinning über TrustManager für Android und URLSession für iOS hinzufügen. OpenID Connect Discovery (well-known-Endpunkt) hilft, die korrekten Endpunkte des Autorisierungsservers automatisch zu ermitteln und Weiterleitungen auf Phishing-Seiten zu vermeiden.
Häufig gestellte Fragen
OAuth 2.0 ist ein Autorisierungsprotokoll (was darf getan werden?), während OpenID Connect (OIDC) ein Authentifizierungsprotokoll ist (wer ist der Benutzer?). OIDC baut auf OAuth 2.0 auf und fügt einen ID Token hinzu – einen JWT-Token, der Informationen über die Identität des Benutzers enthält. OAuth 2.0 stellt einen Access Token bereit, OIDC ergänzt ihn um einen ID Token und einen UserInfo-Endpunkt zum Abrufen des Benutzerprofils.
Ein Bearer Token ist ein Access Token, der im HTTP-Header Authorization: Bearer vorgelegt wird. Seine Gefahr besteht darin, dass jeder, der den Token besitzt, auf die Ressource zugreifen kann – der Token ist nicht an den Client gebunden. Daher darf ein Bearer Token nur über TLS (HTTPS) übertragen werden, eine kurze Lebensdauer (15–60 Minuten) haben und niemals in Protokollen oder URL-Parametern gespeichert werden.
Mobile Anwendungen sind öffentliche Clients, die keinen client_secret besitzen (ein Geheimnis kann in APK/IPA nicht geschützt werden). Ohne PKCE könnte ein Angreifer den authorization code über ein benutzerdefiniertes URI-Schema (z. B. malformed://callback?code=ABC) abfangen und gegen einen Token eintauschen. PKCE fügt einen code_verifier hinzu, der nur der Anwendung bekannt ist, und macht den abgefangenen Code nutzlos.
Ein typischer Access Token hat eine Lebensdauer von 15–60 Minuten (am Autorisierungsserver konfigurierbar). Bei jeder HTTP-Anfrage an den Resource Server wird die Antwort überprüft: Wenn der Code 401 ist, löst die Anwendung den Refresh Token Flow aus, um einen neuen Access Token zu erhalten. Der Refresh Token lebt zwischen 24 Stunden und mehreren Monaten, je nach Sicherheitsrichtlinie des Anbieters. Wenn der Refresh Token geändert wird, wird der alte ungültig.
Nein – das IETF Security BCP (RFC 9700) verbietet WebView für OAuth 2.0 in mobilen Anwendungen. WebView isoliert Cookies und Daten nicht von der Hauptanwendung, was es der Anwendung ermöglicht, die Anmeldeinformationen des Benutzers abzufangen. Verwenden Sie stattdessen Chrome Custom Tabs (Android) oder ASWebAuthenticationSession (iOS) – Systembrowser-Komponenten, die von der Anwendung isoliert sind.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch