OAuth 2.0: Was es ist und wie das Autorisierungsprotokoll funktioniert

Autor: IT Sectr Veröffentlicht: 2026-04-05 Lesezeit: 10 Min.

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 delegiertes Autorisierungsprotokoll, das einer Anwendung den Zugriff auf Benutzerressourcen ermöglicht, ohne ein Passwort zu übertragen (IETF RFC 6749)
  • Access Token ist ein temporärer Zugriffstoken, der vom Autorisierungsserver an die Anwendung nach erfolgreicher Benutzerauthentifizierung ausgestellt wird
  • Authorization Code Flow ist der sicherste Grant Type für mobile Anwendungen, der einen Code Challenge (PKCE) zum Schutz vor Abfangen verwendet
  • Refresh Token ist ein langlebiger Token, um neue Access Tokens zu erhalten, ohne dass sich der Benutzer erneut anmelden muss
  • AppAuth ist die von der IETF empfohlene Bibliothek zur Implementierung von OAuth 2.0 in nativen mobilen Anwendungen auf Android und iOS

Was ist OAuth 2.0?

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.

Rollen und Komponenten von OAuth 2.0

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.

Die vier Rollen des Protokolls

RolleBeschreibungBeispiel
Resource OwnerDer Dateninhaber – der Benutzer, der den Zugriff auf seine Ressourcen gewährtEin Anwendungsbenutzer, der auf „Mit Google anmelden“ klickt
ClientDie Anwendung, die im Namen des Inhabers Zugriff auf Ressourcen anfordertEine mobile App, die Zugriff auf Google Drive benötigt
Authorization ServerDer Server, der nach Authentifizierung und Autorisierung Tokens ausstelltaccounts.google.com – der Autorisierungsserver von Google
Resource ServerDie API, die über einen Token Zugriff auf geschützte Ressourcen gewährtwww.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.

Grant Types: Autorisierungsszenarien

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).

Wichtigste Grant Types

  • Authorization Code + PKCE ist der empfohlene Grant Type für native mobile Anwendungen. Der Client generiert einen kryptografischen code_verifier, berechnet einen code_challenge (SHA-256-Hash) und der Server überprüft die Übereinstimmung beim Austausch des Codes gegen einen Token. Dies verhindert das Abfangen des authorization codes zwischen der Anwendung und dem Server
  • Client Credentials wird für die Maschine-zu-Maschine-Autorisierung verwendet, bei der der Client bekannt und authentifiziert ist. Die Anwendung erhält einen Token unter Verwendung ihrer client_id und ihres client_secret. Keine Benutzerbeteiligung erforderlich. Typisches Szenario: Eine Serveranwendung ruft eine API zur Batch-Datenverarbeitung auf
  • Device Authorization Grant ist für Geräte ohne Browser (Smart TV, IoT) gedacht. Der Benutzer folgt einem Link auf einem anderen Gerät und gibt einen Code ein. Wird zum Beispiel bei der Autorisierung von Netflix auf einem Fernseher über ein Smartphone verwendet
  • Resource Owner Password Credentials ist ein veralteter Grant Type, der durch OAuth Security BCP verboten ist. Das Passwort wird direkt an den Client übertragen, was gegen das Prinzip der Zero-Knowledge-Authentifizierung verstößt. Wird nur für die Migration von Legacy-Systemen verwendet

Authorization Code Flow mit PKCE für mobile Anwendungen

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.

Schritt-für-Schritt-Ablauf von PKCE

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.

Implementierung von OAuth 2.0 auf Android über AppAuth

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.

kotlin
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.

kotlin
// 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-Sicherheit: Typische Angriffe und Schutz

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

Was ist der Unterschied zwischen OAuth 2.0 und OpenID Connect?

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.

Was ist ein Bearer Token und warum ist er gefährlich?

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.

Warum ist PKCE für mobile Anwendungen obligatorisch?

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.

Wie oft sollte der Access Token erneuert werden?

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.

Kann WebView für OAuth 2.0 verwendet werden?

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

  • OAuth 2.0 ist ein delegiertes Autorisierungsprotokoll (IETF RFC 6749), das die Passwortübertragung durch temporäre Tokens mit eingeschränktem Zugriffsbereich ersetzt
  • Authorization Code + PKCE ist der obligatorische Grant Type für mobile Anwendungen, der vor dem Abfangen von authorization codes über URI-Schemata schützt
  • Access Token ist ein kurzlebiger Token (15–60 Minuten), der bei jeder Datenanfrage dem Resource Server vorgelegt wird
  • Refresh Token ist ein langlebiger Token zur nahtlosen Erneuerung des Access Tokens, ohne dass sich der Benutzer erneut anmelden muss
  • AppAuth ist die Referenz-OAuth-2.0-Bibliothek für Android und iOS mit Unterstützung für PKCE, Custom Tabs und KeyStore
  • WebView ist verboten – OAuth 2.0 muss gemäß IETF RFC 9700 über den Systembrowser (Custom Tabs / ASWebAuthenticationSession) erfolgen
  • OpenID Connect ist ein Authentifizierungsprotokoll auf Basis von OAuth 2.0, das einen ID Token (JWT) zur Benutzeridentifikation hinzufügt

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.

Projekt besprechen

Lesen Sie auch