OAuth 2.0 für mobile und Desktop-Apps

In diesem Dokument wird erläutert, wie Anwendungen, die auf Geräten wie Smartphones, Tablets und Computern installiert sind, die OAuth 2.0-Endpunkte von Google verwenden, um den Zugriff auf die YouTube Data API zu autorisieren.

Mit OAuth 2.0 können Nutzer bestimmte Daten für eine Anwendung freigeben, während ihre Nutzernamen, Passwörter und andere Informationen privat bleiben. Beispielsweise kann eine Anwendung OAuth 2.0 verwenden, um die Berechtigung zum Hochladen von Videos auf den YouTube-Kanal eines Nutzers zu erhalten.

Installierte Apps werden an einzelne Geräte verteilt und es wird davon ausgegangen, dass diese Apps keine Secrets speichern können. Sie können auf Google APIs zugreifen, während sich der Nutzer in der App befindet oder die App im Hintergrund ausgeführt wird.

Dieser Autorisierungsvorgang ähnelt dem für Webserveranwendungen. Der Hauptunterschied besteht darin, dass installierte Anwendungen den Systembrowser öffnen und einen lokalen Weiterleitungs-URI bereitstellen müssen, um Antworten vom Autorisierungsserver von Google zu verarbeiten.

Alternativen

Für mobile Apps können Sie Google Log-in für Android oder iOS verwenden. Die Google Log-in-Clientbibliotheken übernehmen die Authentifizierung und Nutzerautorisierung und sind möglicherweise einfacher zu implementieren als das hier beschriebene untergeordnete Protokoll.

Informationen zu Apps, die auf Geräten ausgeführt werden, die keinen Systembrowser unterstützen oder nur eingeschränkte Eingabefunktionen haben, z. B. Fernseher, Spielekonsolen, Kameras oder Drucker, findest du unter OAuth 2.0 für Fernseher und Geräte oder Anmeldung auf Fernsehern und Geräten mit eingeschränkter Eingabe.

Bibliotheken und Beispiele

Wir empfehlen die folgenden Bibliotheken und Beispiele, die dir bei der Implementierung des in diesem Dokument beschriebenen OAuth 2.0-Vorgangs helfen:

Voraussetzungen

Die APIs für Ihr Projekt aktivieren

Jede Anwendung, die Google APIs aufruft, muss diese APIs im API Consoleaktivieren.

So aktivieren Sie eine API für Ihr Projekt:

  1. Open the API Library in Google API Console.
  2. If prompted, select a project, or create a new one.
  3. Auf der Seite Bibliothek kannst du die YouTube Data API finden und aktivieren. Suchen Sie alle anderen APIs, die Ihre Anwendung verwendet, und aktivieren Sie diese ebenfalls.

Anmeldedaten für die Autorisierung erstellen

Jede Anwendung, die OAuth 2.0 für den Zugriff auf Google APIs verwendet, benötigt Autorisierungsanmeldedaten, die die Anwendung beim OAuth 2.0-Server von Google identifizieren. In den folgenden Schritten wird erläutert, wie Sie Anmeldedaten für Ihr Projekt erstellen. Ihre Anwendungen können dann mit den Anmeldedaten auf APIs zugreifen, die Sie für das Projekt aktiviert haben.

  1. Go to the Credentials page.
  2. Klicken Sie auf Anmeldedaten erstellen > OAuth-Client-ID.
  3. In den folgenden Abschnitten werden die Clienttypen und die Weiterleitungsmethoden beschrieben, die der Autorisierungsserver von Google unterstützt. Wählen Sie den für Ihre Anwendung empfohlenen Clienttyp aus, benennen Sie den OAuth-Client und legen Sie die anderen Felder im Formular entsprechend fest.
Android
  1. Wählen Sie als Anwendungstyp Android aus.
  2. Geben Sie einen Namen für den OAuth-Client ein. Dieser Name wird im Credentials page des Projekts angezeigt, um den Client zu identifizieren.
  3. Geben Sie den Paketnamen Ihrer Android-App ein. Dieser Wert wird in der Manifestdatei Ihrer App im Attribut package des Elements <manifest> definiert.
  4. Geben Sie den SHA-1-Fingerabdruck des Signaturzertifikats der App-Bereitstellung ein.
    • Wenn deine App die App-Signatur von Google Play verwendet, kopiere den SHA-1-Fingerabdruck von der App-Signaturseite der Play Console.
    • Wenn Sie Ihren eigenen Schlüsselspeicher und Ihre eigenen Signaturschlüssel verwalten, können Sie mit dem in Java enthaltenen Dienstprogramm keytool Zertifikatsinformationen in einem visuell lesbaren Format ausgeben. Kopieren Sie den Wert SHA1 in den Abschnitt Certificate fingerprints der keytool-Ausgabe. Weitere Informationen finden Sie in der Dokumentation zu Google APIs für Android unter Client authentifizieren.
  5. Optional: Bestätige die Inhaberschaft deiner Android-App.
  6. Klicken Sie auf Erstellen.
iOS
  1. Wählen Sie als Anwendungstyp iOS aus.
  2. Geben Sie einen Namen für den OAuth-Client ein. Dieser Name wird im Credentials page des Projekts angezeigt, um den Client zu identifizieren.
  3. Geben Sie die Bundle-ID für Ihre App ein. Die Bundle-ID ist der Wert des Schlüssels CFBundleIdentifier in der Ressourcendatei mit der Informationsattributliste Ihrer App (info.plist). Der Wert wird meist im Bereich „General“ (Allgemein) oder im Bereich „Signing & Capabilities“ (Signatur und Funktionen) des Xcode-Projekteditors angezeigt. Die Paket-ID wird auch im Abschnitt „Allgemeine Informationen“ der Seite „App-Informationen“ für die App auf der App Store Connect-Website von Apple angezeigt.
  4. (Optional)

    Geben Sie die App Store-ID Ihrer App ein, wenn sie im App Store von Apple veröffentlicht wurde. Die Store-ID ist ein numerischer String, der in jeder Apple App Store-URL enthalten ist.

    1. Öffne die App Store-App auf deinem iOS- oder iPadOS-Gerät.
    2. Suchen Sie nach Ihrer App.
    3. Wähle die Schaltfläche „Teilen“ aus (Square und Aufwärtspfeil).
    4. Wählen Sie Link kopieren aus.
    5. Fügen Sie den Link in einen Texteditor ein. Die App Store-ID ist der letzte Teil der URL.

      Beispiel: https://apps.apple.com/app/google/id284815942

  5. (Optional)

    Gib deine Team-ID ein. Weitere Informationen finden Sie in der Dokumentation zum Apple-Entwicklerkonto unter Team-ID finden.

  6. Klicken Sie auf Erstellen.
UWP
  1. Wählen Sie den Anwendungstyp Universelle Windows-Plattform aus.
  2. Geben Sie einen Namen für den OAuth-Client ein. Dieser Name wird im Credentials page des Projekts angezeigt, um den Client zu identifizieren.
  3. Geben Sie die 12-stellige Microsoft Store-ID Ihrer App ein. Sie finden diesen Wert im Microsoft Partner Center auf der Seite App-Identität im Bereich „App-Verwaltung“.
  4. Klicken Sie auf Erstellen.

Bei UWP-Apps darf das benutzerdefinierte URI-Schema nicht länger als 39 Zeichen sein.

Benutzerdefiniertes URI-Schema (Android, iOS, UWP)

Benutzerdefinierte URI-Schemas sind eine Form von Deeplinks, bei der ein benutzerdefiniertes Schema zum Öffnen Ihrer App verwendet wird.

Alternative zur Verwendung benutzerdefinierter URI-Schemas unter Android

Verwende das Google Log-in for Android SDK, das die OAuth 2.0-Antwort direkt an deine App sendet. Dadurch ist kein Weiterleitungs-URI erforderlich.

Zum Google Log-in for Android SDK migrieren

Wenn du derzeit ein benutzerdefiniertes Schema für deine OAuth-Integration unter Android verwendest, musst du die folgenden Aktionen ausführen, um vollständig zum empfohlenen SDK „Google Log-in“ für Android zu migrieren:

  1. Aktualisieren Sie Ihren Code so, dass das Google Log-in SDK verwendet wird.
  2. Unterstützung für benutzerdefinierte Schemas in der Google API Console deaktivieren.

Führen Sie die folgenden Schritte aus, um zum Google Log-in Android SDK zu migrieren:

  1. Aktualisieren Sie Ihren Code, um das Google Log-in Android SDK zu verwenden:
    1. Prüfe im Code, wohin du eine Anfrage an den OAuth 2.0-Server von Google sendest. Wenn du ein benutzerdefiniertes Schema verwendest, würde deine Anfrage so aussehen:
        https://accounts.google.com/o/oauth2/v2/auth?
        scope=<SCOPES>&
        response_type=code&
        &state=<STATE>&
        redirect_uri=com.example.app:/oauth2redirect&
        client_id=<CLIENT_ID>
        
      com.example.app:/oauth2redirect ist der Weiterleitungs-URI für benutzerdefinierte Schemas aus dem obigen Beispiel. Weitere Informationen zum Format des benutzerdefinierten URI-Schemawerts finden Sie in der Parameterdefinition redirect_uri.
    2. Notieren Sie sich die Anfrageparameter scope und client_id, die Sie zum Konfigurieren des Google Log-In SDK benötigen.
    3. Folgen Sie der Anleitung unter Google Log-in in Android-App einbinden, um das SDK einzurichten. Sie können den Schritt OAuth 2.0-Client-ID Ihres Back-End-Servers abrufen überspringen, da Sie das client_id wiederverwenden würden, das Sie im vorherigen Schritt abgerufen haben.
    4. Folgen Sie der Anleitung unter Serverseitigen API-Zugriff aktivieren. Dazu sind folgende Schritte erforderlich:
      1. Verwenden Sie die Methode getServerAuthCode, um einen Autorisierungscode für die Bereiche abzurufen, für die Sie eine Berechtigung anfordern.
      2. Senden Sie den Autorisierungscode an das Back-End Ihrer Anwendung, um ihn gegen ein Zugriffs- und Aktualisierungstoken auszutauschen.
      3. Verwenden Sie das abgerufene Zugriffstoken, um im Namen des Nutzers Google APIs aufzurufen.
  2. Deaktivieren Sie die Unterstützung für benutzerdefinierte Schemas in der Google API Console:
    1. Rufen Sie die Liste der OAuth 2.0-Anmeldedaten auf und wählen Sie Ihren Android-Client aus.
    2. Gehen Sie zum Bereich Erweiterte Einstellungen, entfernen Sie das Häkchen aus dem Kästchen Benutzerdefiniertes URI-Schema aktivieren und klicken Sie auf Speichern, um die Unterstützung für benutzerdefinierte URI-Schemas zu deaktivieren.
Benutzerdefiniertes URI-Schema wird aktiviert
Wenn die empfohlene Alternative für Sie nicht infrage kommt, können Sie benutzerdefinierte URI-Schemas für Ihren Android-Client aktivieren. Folgen Sie dazu der Anleitung unten:
  1. Rufe die Liste der OAuth 2.0-Anmeldedaten auf und wähle deinen Android-Client aus.
  2. Wechseln Sie zum Bereich Erweiterte Einstellungen, klicken Sie auf das Kästchen Benutzerdefiniertes URI-Schema aktivieren und dann auf Speichern, um die Unterstützung für benutzerdefinierte URI-Schemas zu aktivieren.
Alternative zur Verwendung benutzerdefinierter URI-Schemas in Chrome-Apps

Verwenden Sie die Chrome Identity API, die die OAuth 2.0-Antwort direkt an Ihre Anwendung sendet. Dadurch ist kein Weiterleitungs-URI erforderlich.

App-Inhaberschaft bestätigen (Android, Chrome)

Sie können die Inhaberschaft Ihrer Anwendung bestätigen, um das Risiko eines Identitätsdiebstahls zu verringern.

Android

Zum Abschließen des Bestätigungsprozesses kannst du gegebenenfalls dein Google Play-Entwicklerkonto verwenden und deine App ist in der Google Play Console registriert. Für eine erfolgreiche Überprüfung müssen folgende Voraussetzungen erfüllt sein:

  • Du benötigst in der Google Play Console eine registrierte App mit demselben Paketnamen und demselben SHA-1-Fingerabdruck des Signaturzertifikats wie der Android-OAuth-Client, für den du die Überprüfung durchführst.
  • Du benötigst eine Administratorberechtigung für die App in der Google Play Console. Weitere Informationen zur Zugriffsverwaltung in der Google Play Console.

Klicken Sie im Abschnitt App-Inhaberschaft bestätigen des Android-Clients auf die Schaltfläche Inhaberschaft bestätigen, um den Bestätigungsvorgang abzuschließen.

Ist die Überprüfung erfolgreich, wird sie in einer Benachrichtigung bestätigt. Andernfalls wird eine Fehlermeldung angezeigt.

So beheben Sie Fehler bei der Bestätigung:

  • Die App, die Sie bestätigen möchten, muss in der Google Play Console registriert sein.
  • Achte darauf, dass du die Administratorberechtigung für die App in der Google Play Console hast.
Chrome

Für den Bestätigungsvorgang benötigen Sie Ihr Chrome Web Store-Entwicklerkonto. Für eine erfolgreiche Überprüfung müssen folgende Voraussetzungen erfüllt sein:

  • Sie müssen einen registrierten Artikel im Chrome Web Store-Entwickler-Dashboard haben, dessen Artikel-ID mit der Artikel-ID des OAuth-Clients der Chrome-Erweiterung übereinstimmt, für den Sie die Überprüfung durchführen.
  • Sie müssen Publisher des Chrome Web Store-Artikels sein. Weitere Informationen zur Zugriffsverwaltung im Chrome Web Store-Entwickler-Dashboard.

Klicken Sie im Abschnitt App-Inhaberschaft bestätigen des Chrome-Erweiterungsclients auf die Schaltfläche Inhaberschaft bestätigen, um den Bestätigungsvorgang abzuschließen.

Hinweis: Nachdem Sie Zugriff auf Ihr Konto gewährt haben, warten Sie einige Minuten, bevor Sie den Bestätigungsvorgang abschließen.

Ist die Überprüfung erfolgreich, wird sie in einer Benachrichtigung bestätigt. Andernfalls wird eine Fehlermeldung angezeigt.

So beheben Sie Fehler bei der Bestätigung:

  • Achte darauf, dass ein registrierter Artikel im Chrome Web Store-Entwickler-Dashboard mit derselben Artikel-ID wie der OAuth-Client der Chrome-Erweiterung vorhanden ist, für den du die Überprüfung durchführst.
  • Sie müssen ein Publisher der App sein, also entweder der einzelne Publisher der App oder ein Mitglied des Gruppen-Publishers der App. Weitere Informationen zur Zugriffsverwaltung im Chrome Web Store-Entwickler-Dashboard
  • Wenn Sie Ihre Gruppen-Publisher-Liste gerade aktualisiert haben, prüfen Sie, ob die Gruppen-Publisher-Liste im Chrome Web Store-Entwickler-Dashboard synchronisiert ist. Weitere Informationen zur Synchronisierung deiner Mitgliederliste beim Verlag oder Webpublisher.

Loopback-IP-Adresse (macOS, Linux, Windows-Desktop)

Damit der Autorisierungscode über diese URL empfangen werden kann, muss Ihre Anwendung den lokalen Webserver überwachen. Das ist auf vielen, aber nicht auf allen Plattformen möglich. Wenn Ihre Plattform dies jedoch unterstützt, ist dies die empfohlene Methode zum Abrufen des Autorisierungscodes.

Wenn Ihre Anwendung die Autorisierungsantwort erhält, sollte sie am besten durch Anzeige einer HTML-Seite reagieren, die den Nutzer auffordert, den Browser zu schließen und zu Ihrer Anwendung zurückzukehren.

Empfohlene Verwendung macOS-, Linux- und Windows-Desktopanwendungen (aber nicht für die universelle Windows-Plattform)
Formularwerte Legen Sie als Anwendungstyp Desktop-App fest.

Manuelles Kopieren/Einfügen

Zugriffsbereiche identifizieren

Mit Bereichen kann Ihre Anwendung nur Zugriff auf die benötigten Ressourcen anfordern und Nutzer können gleichzeitig den Umfang des Zugriffs steuern, den sie Ihrer Anwendung gewähren. Daher kann eine umgekehrte Beziehung zwischen der Anzahl der angeforderten Bereiche und der Wahrscheinlichkeit, die Nutzereinwilligung einzuholen, bestehen.

Bevor Sie mit der Implementierung der OAuth 2.0-Autorisierung beginnen, sollten Sie die Bereiche identifizieren, auf die Ihre Anwendung eine Zugriffsberechtigung benötigt.

Für Version 3 der YouTube Data API werden die folgenden Umfänge verwendet:

Sucher
https://www.googleapis.com/auth/youtubeYouTube-Konto verwalten
https://www.googleapis.com/auth/youtube.channel-memberships.creatorEine Liste der aktuell aktiven Mitglieder des Kanals, ihre Stufe und ihr Eintrittsdatum abrufen
https://www.googleapis.com/auth/youtube.force-sslIhre YouTube-Videos, -Bewertungen, -Kommentare und -Untertitel ansehen, bearbeiten oder dauerhaft löschen
https://www.googleapis.com/auth/youtube.readonlyYouTube-Konto abrufen
https://www.googleapis.com/auth/youtube.uploadYouTube-Videos verwalten
https://www.googleapis.com/auth/youtubepartnerIhre Inhalte und zugehörigen Content bei YouTube abrufen und verwalten
https://www.googleapis.com/auth/youtubepartner-channel-auditPrivate Informationen aus dem YouTube-Kanal abrufen, die während des Prüfprozesses durch einen YouTube-Partner relevant sind

Das Dokument OAuth 2.0 API-Bereiche enthält eine vollständige Liste der Bereiche, die Sie für den Zugriff auf Google APIs verwenden können.

OAuth 2.0-Zugriffstokens abrufen

Die folgenden Schritte zeigen, wie deine Anwendung mit dem OAuth 2.0-Server von Google interagiert, um die Einwilligung eines Nutzers einzuholen, eine API-Anfrage im Namen des Nutzers auszuführen. Ihre Anwendung muss diese Einwilligung haben, bevor sie eine Google API-Anfrage ausführen kann, die eine Nutzerautorisierung erfordert.

Schritt 1: Codeprüfung und ‐herausforderung generieren

Google unterstützt das Protokoll Proof Key for Code Exchange (PKCE), um den Ablauf der installierten App sicherer zu machen. Für jede Autorisierungsanfrage wird eine eindeutige Codeprüfung erstellt und der transformierte Wert namens „code_challenge“ wird an den Autorisierungsserver gesendet, um den Autorisierungscode abzurufen.

Codeprüfung erstellen

Ein code_verifier ist ein kryptografischer Zufallsstring mit hoher Entropie, der die nicht reservierten Zeichen [A–Z] / [a–z] / [0–9] / „-“ / „.“ / „_“ / „~“ mit einer Mindestlänge von 43 Zeichen und einer maximalen Länge von 128 Zeichen verwendet.

Die Codeprüfung sollte genügend Entropie haben, damit der Wert nicht erraten werden kann.

Code-Challenge erstellen

Es werden zwei Methoden zum Erstellen der Code-Abfrage unterstützt.

Methoden zur Generierung von Code-Challenges
S256 (empfohlen) Die Codeabfrage ist der Base64URL-codierte SHA256-Hash der Codeprüfung (ohne Padding).
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
Einfach Die Codeabfrage entspricht dem Wert der oben generierten Codeprüfung.
code_challenge = code_verifier

Schritt 2: Anfrage an den OAuth 2.0-Server von Google senden

Senden Sie eine Anfrage an den Autorisierungsserver von Google unter https://accounts.google.com/o/oauth2/v2/auth, um eine Nutzerautorisierung zu erhalten. Dieser Endpunkt verarbeitet die Suche nach aktiven Sitzungen, authentifiziert den Nutzer und ruft die Nutzereinwilligung ein. Der Endpunkt ist nur über SSL zugänglich und lehnt HTTP-Verbindungen (nicht SSL) ab.

Der Autorisierungsserver unterstützt die folgenden Abfragestringparameter für installierte Anwendungen:

Parameter
client_id Erforderlich

Die Client-ID für Ihre Anwendung. Sie finden diesen Wert in der API Console- Credentials page.

redirect_uri Erforderlich

Legt fest, wie der Autorisierungsserver von Google eine Antwort an Ihre Anwendung sendet. Für installierte Anwendungen sind mehrere Weiterleitungsoptionen verfügbar und Sie haben bei der Einrichtung Ihrer Anmeldedaten für die Autorisierung eine bestimmte Weiterleitungsmethode berücksichtigt.

Der Wert muss genau mit einem der autorisierten Weiterleitungs-URIs für den OAuth 2.0-Client übereinstimmen, die du in der API Console- Credentials pagedes Clients konfiguriert hast. Wenn dieser Wert mit keinem autorisierten URI übereinstimmt, erhalten Sie den Fehler redirect_uri_mismatch.

In der folgenden Tabelle sehen Sie für jede Methode den passenden redirect_uri-Parameterwert:

redirect_uri-Werte
Benutzerdefiniertes URI-Schema com.example.app:redirect_uri_path

oder

com.googleusercontent.apps.123:redirect_uri_path
  • com.example.app ist die umgekehrte DNS-Notation einer Domain, die Sie kontrollieren. Das benutzerdefinierte Schema muss einen Punkt enthalten, damit es gültig ist.
  • com.googleusercontent.apps.123 ist die umgekehrte DNS-Notation der Client-ID.
  • redirect_uri_path ist eine optionale Pfadkomponente, z. B. /oauth2redirect. Der Pfad muss mit einem einzelnen Schrägstrich beginnen. Dies unterscheidet sich von regulären HTTP-URLs.
Loopback-IP-Adresse http://127.0.0.1:port oder http://[::1]:port

Fragen Sie Ihre Plattform nach der relevanten Loopback-IP-Adresse ab und starten Sie einen HTTP-Listener an einem zufälligen verfügbaren Port. Ersetzen Sie port durch die Portnummer, die Ihre Anwendung überwacht.

Beachten Sie, dass die Unterstützung für die Loopback-IP-Adressweiterleitungsoption in mobilen Apps EINGESTELLT wird.

response_type Erforderlich

Bestimmt, ob der Google OAuth 2.0-Endpunkt einen Autorisierungscode zurückgibt.

Legen Sie den Parameterwert für installierte Anwendungen auf code fest.

scope Erforderlich

Eine durch Leerzeichen getrennte Liste von Bereichen, die die Ressourcen identifizieren, auf die Ihre Anwendung im Namen des Nutzers zugreifen könnte. Diese Werte bilden die Grundlage für den Zustimmungsbildschirm, den Google dem Nutzer anzeigt.

Mit Bereichen kann Ihre Anwendung nur Zugriff auf die benötigten Ressourcen anfordern und Nutzer können gleichzeitig den Umfang des Zugriffs steuern, den sie Ihrer Anwendung gewähren. Daher besteht eine umgekehrte Beziehung zwischen der Anzahl der angeforderten Bereiche und der Wahrscheinlichkeit, die Nutzereinwilligung einzuholen.

Für Version 3 der YouTube Data API werden die folgenden Umfänge verwendet:

Sucher
https://www.googleapis.com/auth/youtubeYouTube-Konto verwalten
https://www.googleapis.com/auth/youtube.channel-memberships.creatorEine Liste der aktuell aktiven Mitglieder des Kanals, ihre Stufe und ihr Eintrittsdatum abrufen
https://www.googleapis.com/auth/youtube.force-sslIhre YouTube-Videos, -Bewertungen, -Kommentare und -Untertitel ansehen, bearbeiten oder dauerhaft löschen
https://www.googleapis.com/auth/youtube.readonlyYouTube-Konto abrufen
https://www.googleapis.com/auth/youtube.uploadYouTube-Videos verwalten
https://www.googleapis.com/auth/youtubepartnerIhre Inhalte und zugehörigen Content bei YouTube abrufen und verwalten
https://www.googleapis.com/auth/youtubepartner-channel-auditPrivate Informationen aus dem YouTube-Kanal abrufen, die während des Prüfprozesses durch einen YouTube-Partner relevant sind

Das Dokument OAuth 2.0 API-Bereiche enthält eine vollständige Liste der Bereiche, die Sie für den Zugriff auf Google APIs verwenden können.

code_challenge Empfohlen

Gibt eine codierte code_verifier an, die beim Austausch des Autorisierungscodes als serverseitige Identitätsbestätigung verwendet wird. Weitere Informationen finden Sie oben im Abschnitt Code-Challenge.

code_challenge_method Empfohlen

Gibt an, mit welcher Methode ein code_verifier codiert wurde, das beim Austausch des Autorisierungscodes verwendet wird. Dieser Parameter muss mit dem oben beschriebenen Parameter code_challenge verwendet werden. Der Wert von code_challenge_method ist standardmäßig plain, wenn er in der Anfrage mit code_challenge nicht vorhanden ist. Die einzigen unterstützten Werte für diesen Parameter sind S256 oder plain.

state Empfohlen

Gibt einen beliebigen Stringwert an, mit dem Ihre Anwendung den Status zwischen Ihrer Autorisierungsanfrage und der Antwort des Autorisierungsservers aufrechterhält. Der Server gibt genau den Wert zurück, den du als name=value-Paar in der URL-Fragment-ID (#) von redirect_uri sendest, nachdem der Nutzer der Zugriffsanfrage deiner Anwendung zugestimmt oder sie abgelehnt hat.

Sie können diesen Parameter für verschiedene Zwecke verwenden, z. B. um den Nutzer zur richtigen Ressource in Ihrer Anwendung weiterzuleiten, Nonces zu senden und websiteübergreifende Anfragefälschungen zu minimieren. Da Ihr redirect_uri erraten werden kann, kann die Verwendung eines state-Werts die Gewissheit erhöhen, dass eine eingehende Verbindung das Ergebnis einer Authentifizierungsanfrage ist. Wenn Sie einen zufälligen String generieren oder den Hash eines Cookies oder eines anderen Werts codieren, der den Status des Clients erfasst, können Sie die Antwort validieren, um zusätzlich dafür zu sorgen, dass die Anfrage und die Antwort aus demselben Browser stammen. Dies bietet Schutz vor Angriffen wie Cross-Site Request Forgery. In der OpenID Connect-Dokumentation finden Sie ein Beispiel für das Erstellen und Bestätigen eines state-Tokens.

login_hint Optional

Wenn Ihre Anwendung weiß, welcher Nutzer sich authentifizieren möchte, kann sie mit diesem Parameter einen Hinweis für den Google-Authentifizierungsserver bereitstellen. Der Server verwendet den Hinweis, um den Anmeldevorgang zu vereinfachen. Dazu wird entweder das E-Mail-Feld im Anmeldeformular vorab ausgefüllt oder die entsprechende Mehrfachanmeldungssitzung ausgewählt.

Legen Sie als Parameterwert eine E-Mail-Adresse oder eine sub-Kennung fest, die der Google-ID des Nutzers entspricht.

Beispiele für Autorisierungs-URLs

Auf den Tabs unten sehen Sie Beispiele für Autorisierungs-URLs für die verschiedenen Optionen für Weiterleitungs-URIs.

Jede URL fordert Zugriff auf einen Bereich an, der den Zugriff auf das YouTube-Konto des Nutzers ermöglicht.

Die URLs sind bis auf den Wert des Parameters redirect_uri identisch. Die URLs enthalten außerdem die erforderlichen Parameter response_type und client_id sowie den optionalen Parameter state. Jede URL enthält zur besseren Lesbarkeit Zeilenumbrüche und Leerzeichen.

Benutzerdefiniertes URI-Schema

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=com.example.app%3A/oauth2redirect&
 client_id=client_id

Loopback-IP-Adresse

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=http%3A//127.0.0.1%3A9004&
 client_id=client_id

Schritt 3: Google fordert den Nutzer zur Einwilligung auf

In diesem Schritt entscheidet der Nutzer, ob er Ihrer Anwendung den angeforderten Zugriff gewähren möchte. In dieser Phase zeigt Google ein Einwilligungsfenster mit dem Namen Ihrer Anwendung und den Google API-Diensten an, für die die Berechtigung mit den Autorisierungsanmeldedaten des Nutzers angefordert wird. Außerdem wird eine Zusammenfassung der Zugriffsbereiche angezeigt, die gewährt werden sollen. Der Nutzer kann dann zustimmen, Zugriff auf einen oder mehrere Bereiche zu gewähren, die von Ihrer Anwendung angefordert werden, oder die Anfrage ablehnen.

Deine Anwendung muss in dieser Phase nichts weiter tun, da sie auf die Antwort vom OAuth 2.0-Server von Google wartet, die angibt, ob ein Zugriff gewährt wurde. Diese Antwort wird im folgenden Schritt erklärt.

Fehler

Bei Anfragen an den OAuth 2.0-Autorisierungsendpunkt von Google werden möglicherweise nutzerseitige Fehlermeldungen anstelle der erwarteten Authentifizierungs- und Autorisierungsabläufe angezeigt. Häufige Fehlercodes und Lösungsvorschläge sind unten aufgeführt.

admin_policy_enforced

Mindestens ein Bereich kann aufgrund der Richtlinien seines Google Workspace-Administrators nicht mit dem Google-Konto autorisiert werden. Im Hilfeartikel Zugriff externer und interner Apps auf Google Workspace-Daten steuern finden Sie weitere Informationen dazu, wie ein Administrator den Zugriff auf alle Bereiche oder auf vertrauliche und eingeschränkte Bereiche einschränken kann, bis der Zugriff auf Ihre OAuth-Client-ID explizit gewährt wird.

disallowed_useragent

Der Autorisierungsendpunkt wird in einem eingebetteten User-Agent angezeigt, der gemäß den OAuth 2.0-Richtlinien von Google unzulässig ist.

Android

Android-Entwicklern kann diese Fehlermeldung angezeigt werden, wenn sie Autorisierungsanfragen in android.webkit.WebView öffnen. Entwickler sollten stattdessen Android-Bibliotheken wie Google Log-in for Android oder AppAuth for Android der OpenID Foundation verwenden.

Bei Webentwicklern kann dieser Fehler auftreten, wenn eine Android-App einen allgemeinen Weblink in einem eingebetteten User-Agent öffnet und ein Nutzer von deiner Website zum OAuth 2.0-Autorisierungsendpunkt von Google navigiert. Entwickler sollten das Öffnen allgemeiner Links im Standard-Link-Handler des Betriebssystems zulassen. Dazu gehören sowohl Handler für Android-App-Links als auch die Standard-Browser-App. Eine unterstützte Option ist auch die Bibliothek mit benutzerdefinierten Android-Tabs.

iOS

Bei iOS- und macOS-Entwicklern kann dieser Fehler auftreten, wenn sie Autorisierungsanfragen in WKWebView öffnen. Entwickler sollten stattdessen iOS-Bibliotheken wie Google Log-in für iOS oder AppAuth für iOS von OpenID Foundation verwenden.

Bei Webentwicklern kann dieser Fehler auftreten, wenn eine iOS- oder macOS-App einen allgemeinen Weblink in einem eingebetteten User-Agent öffnet und ein Nutzer von deiner Website zum OAuth 2.0-Autorisierungsendpunkt von Google wechselt. Entwickler sollten das Öffnen allgemeiner Links im Standard-Link-Handler des Betriebssystems zulassen. Dieser umfasst sowohl universelle Links-Handler als auch die Standard-Browser-App. Eine unterstützte Option ist auch die SFSafariViewController-Bibliothek.

org_internal

Die OAuth-Client-ID in der Anfrage ist Teil eines Projekts, das den Zugriff auf Google-Konten in einer bestimmten Google Cloud-Organisation einschränkt. Weitere Informationen zu dieser Konfigurationsoption finden Sie im Hilfeartikel "OAuth-Zustimmungsbildschirm einrichten" im Abschnitt Nutzertyp.

invalid_grant

Wenn Sie eine Codeprüfung und eine Identitätsbestätigung verwenden, ist der Parameter code_callenge ungültig oder fehlt. Der Parameter code_challenge muss korrekt festgelegt sein.

Beim Aktualisieren eines Zugriffstokens ist das Token möglicherweise abgelaufen oder ungültig. Authentifizieren Sie den Nutzer noch einmal und bitten Sie um seine Einwilligung, um neue Tokens zu erhalten. Wenn dieser Fehler weiterhin auftritt, prüfen Sie, ob Ihre Anwendung richtig konfiguriert wurde und Sie die richtigen Tokens und Parameter in Ihrer Anfrage verwenden. Andernfalls wurde das Nutzerkonto möglicherweise gelöscht oder deaktiviert.

redirect_uri_mismatch

Der in der Autorisierungsanfrage übergebene redirect_uri stimmt mit keinem autorisierten Weiterleitungs-URI für die OAuth-Client-ID überein. Prüfen Sie autorisierte Weiterleitungs-URIs in Google API Console Credentials page.

Die übergebene redirect_uri ist möglicherweise für den Clienttyp ungültig.

Der Parameter redirect_uri kann sich auf den OAuth-Out-of-Band-Vorgang (OOB) beziehen, der eingestellt wurde und nicht mehr unterstützt wird. Informationen dazu, wie du deine Integration aktualisierst, findest du in der Migrationsanleitung.

invalid_request

Mit deiner Anfrage ist ein Fehler aufgetreten. Dafür kann es mehrere Gründe geben:

  • Die Anfrage war nicht richtig formatiert
  • In der Anfrage fehlen erforderliche Parameter
  • In der Anfrage wird eine Autorisierungsmethode verwendet, die von Google nicht unterstützt wird. Prüfen, ob Ihre OAuth-Integration eine empfohlene Integrationsmethode verwendet
  • Für den Weiterleitungs-URI wird ein benutzerdefiniertes Schema verwendet : Wenn die Fehlermeldung Das benutzerdefinierte URI-Schema wird in Chrome-Apps nicht unterstützt oder Das benutzerdefinierte URI-Schema ist für Ihren Android-Client nicht aktiviert angezeigt wird, verwenden Sie ein benutzerdefiniertes URI-Schema, das in Chrome-Apps nicht unterstützt wird und in Android standardmäßig deaktiviert ist. Weitere Informationen zu Alternativen für benutzerdefinierte URI-Schemas

Schritt 4: Die Antwort des OAuth 2.0-Servers verarbeiten

Wie Ihre Anwendung die Autorisierungsantwort empfängt, hängt vom verwendeten Weiterleitungs-URI-Schema ab. Unabhängig vom Schema enthält die Antwort entweder einen Autorisierungscode (code) oder einen Fehler (error). Zum Beispiel gibt error=access_denied an, dass der Nutzer die Anfrage abgelehnt hat.

Wenn der Nutzer Zugriff auf deine Anwendung gewährt, kannst du den Autorisierungscode wie im nächsten Schritt beschrieben gegen ein Zugriffstoken und ein Aktualisierungstoken austauschen.

Schritt 5: Autorisierungscode gegen Aktualisierungs- und Zugriffstokens austauschen

Rufen Sie den Endpunkt https://oauth2.googleapis.com/token auf und legen Sie die folgenden Parameter fest, um einen Autorisierungscode gegen ein Zugriffstoken auszutauschen:

Felder
client_id Die Client-ID aus dem API Console Credentials page.
client_secret Der von API Console Credentials pageabgerufene Clientschlüssel.
code Der Autorisierungscode, der von der ursprünglichen Anfrage zurückgegeben wurde.
code_verifier Die Codeprüfung, die Sie in Schritt 1 erstellt haben.
grant_type Wie in der OAuth 2.0-Spezifikation definiert, muss der Wert in diesem Feld auf authorization_code gesetzt sein.
redirect_uri Einer der Weiterleitungs-URIs, die für Ihr Projekt in der API Console Credentials page für die angegebene client_id aufgeführt sind.

Das folgende Snippet zeigt eine Beispielanfrage:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your_client_id&
client_secret=your_client_secret&
redirect_uri=http://127.0.0.1:9004&
grant_type=authorization_code

Google reagiert auf diese Anfrage mit der Rückgabe eines JSON-Objekts, das ein kurzlebiges Zugriffstoken und ein Aktualisierungstoken enthält.

Die Antwort umfasst die folgenden Felder:

Felder
access_token Das Token, das Ihre Anwendung sendet, um eine Google API-Anfrage zu autorisieren.
expires_in Die verbleibende Lebensdauer des Zugriffstokens in Sekunden.
id_token Hinweis: Dieses Attribut wird nur zurückgegeben, wenn die Anfrage einen Identitätsbereich wie openid, profile oder email enthält. Der Wert ist ein JSON Web Token (JWT), das digital signierte Identitätsinformationen über den Nutzer enthält.
refresh_token Ein Token, mit dem Sie ein neues Zugriffstoken abrufen können. Aktualisierungstokens sind gültig, bis der Nutzer den Zugriff widerruft. Beachten Sie, dass Aktualisierungstokens für installierte Anwendungen immer zurückgegeben werden.
scope Die durch access_token gewährten Zugriffsbereiche, ausgedrückt als Liste von durch Leerzeichen getrennten Strings mit Groß- und Kleinschreibung.
token_type Der Typ des zurückgegebenen Tokens. Derzeit ist der Wert dieses Felds immer auf Bearer festgelegt.

Das folgende Snippet zeigt eine Beispielantwort:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/youtube.force-ssl",
  "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

Google APIs aufrufen

Nachdem Ihre Anwendung ein Zugriffstoken abgerufen hat, können Sie mit dem Token im Namen eines bestimmten Nutzerkontos eine Google API aufrufen, wenn die für die API erforderlichen Zugriffsbereiche gewährt wurden. Fügen Sie dazu das Zugriffstoken in eine Anfrage an die API ein, indem Sie entweder einen access_token-Abfrageparameter oder einen Authorization-HTTP-Header-Bearer-Wert angeben. Nach Möglichkeit ist der HTTP-Header zu empfehlen, da Abfragestrings in der Regel in Serverlogs sichtbar sind. In den meisten Fällen kannst du Aufrufe von Google APIs mithilfe einer Clientbibliothek einrichten (z. B. beim Aufrufen der YouTube Data API).

Die YouTube Data API unterstützt nur Dienstkonten für YouTube-Rechteinhaber, die mehrere YouTube-Kanäle wie Labels und Filmstudios besitzen und verwalten.

Im OAuth 2.0 Playground können Sie alle Google APIs ausprobieren und ihre Bereiche ansehen.

Beispiele für HTTP GET

Ein Aufruf des youtube.channels-Endpunkts (die YouTube Data API) über den HTTP-Header Authorization: Bearer könnte so aussehen: Beachten Sie, dass Sie Ihr eigenes Zugriffstoken angeben müssen:

GET /youtube/v3/channels?part=snippet&mine=true HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

Hier sehen Sie einen Aufruf derselben API für den authentifizierten Nutzer mit dem Abfragestringparameter access_token:

GET https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true

Beispiele für curl

Sie können diese Befehle mit der curl-Befehlszeilenanwendung testen. Hier ein Beispiel, in dem die HTTP-Header-Option verwendet wird (bevorzugt):

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true

Alternativ können Sie die Parameteroption für den Abfragestring verwenden:

curl https://www.googleapis.com/youtube/v3/channels?access_token=access_token&part=snippet&mine=true

Zugriffstokens aktualisieren

Zugriffstokens laufen in regelmäßigen Abständen ab und werden zu ungültigen Anmeldedaten für eine zugehörige API-Anfrage. Wenn Sie Offlinezugriff auf die mit dem Token verknüpften Bereiche angefordert haben, können Sie ein Zugriffstoken aktualisieren, ohne dass der Nutzer um seine Berechtigung gebeten wird (auch wenn der Nutzer nicht anwesend ist).

Zum Aktualisieren eines Zugriffstokens sendet Ihre Anwendung eine HTTPS-POST-Anfrage an den Autorisierungsserver von Google (https://oauth2.googleapis.com/token) mit den folgenden Parametern:

Felder
client_id Die Client-ID, die von der API Consoleabgerufen wird.
client_secret Der von API Consoleabgerufene Clientschlüssel. (Die client_secret gilt nicht für Anfragen von Clients, die als Android-, iOS- oder Chrome-Anwendungen registriert sind.)
grant_type Wie in der OAuth 2.0-Spezifikation definiert, muss der Wert dieses Felds auf refresh_token festgelegt sein.
refresh_token Das vom Autorisierungscode-Austausch zurückgegebene Aktualisierungstoken.

Das folgende Snippet zeigt eine Beispielanfrage:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=your_client_id&
client_secret=your_client_secret&
refresh_token=refresh_token&
grant_type=refresh_token

Solange der Nutzer den der Anwendung gewährten Zugriff nicht widerrufen hat, gibt der Tokenserver ein JSON-Objekt zurück, das ein neues Zugriffstoken enthält. Das folgende Snippet zeigt eine Beispielantwort:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "https://www.googleapis.com/auth/drive.metadata.readonly",
  "token_type": "Bearer"
}

Beachten Sie, dass es Limits für die Anzahl der ausgegebenen Aktualisierungstokens gibt: ein Limit pro Client/Nutzer-Kombination und ein weiteres pro Nutzer für alle Clients. Sie sollten Aktualisierungstokens langfristig speichern und so lange verwenden, wie sie gültig sind. Wenn Ihre Anwendung zu viele Aktualisierungstokens anfordert, kann diese Grenze überschritten werden. In diesem Fall funktionieren ältere Aktualisierungstokens nicht mehr.

Token widerrufen

In einigen Fällen möchte ein Nutzer den Zugriff auf eine Anwendung widerrufen. Nutzer können den Zugriff in den Kontoeinstellungen widerrufen. Weitere Informationen finden Sie im Supportdokument zu Websites und Apps von Drittanbietern mit Zugriff auf Ihr Konto im Abschnitt Zugriff auf Websites oder Apps entfernen.

Es ist auch möglich, den Zugriff einer Anwendung programmatisch zu widerrufen. Der programmatische Widerruf ist in Fällen wichtig, in denen ein Nutzer das Abo beendet oder eine Anwendung entfernt oder sich die für eine Anwendung erforderlichen API-Ressourcen erheblich geändert haben. Mit anderen Worten: Ein Teil des Entfernungsprozesses kann eine API-Anfrage umfassen, mit der sichergestellt wird, dass die der Anwendung zuvor gewährten Berechtigungen entfernt werden.

Wenn Sie ein Token programmatisch widerrufen möchten, stellt Ihre Anwendung eine Anfrage an https://oauth2.googleapis.com/revoke und fügt das Token als Parameter ein:

curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
        https://oauth2.googleapis.com/revoke?token={token}

Das Token kann ein Zugriffstoken oder ein Aktualisierungstoken sein. Wenn das Token ein Zugriffstoken ist und ein entsprechendes Aktualisierungstoken hat, wird auch das Aktualisierungstoken widerrufen.

Wenn der Widerruf erfolgreich verarbeitet wurde, lautet der HTTP-Statuscode der Antwort 200. Bei Fehlerbedingungen wird der HTTP-Statuscode 400 zusammen mit einem Fehlercode zurückgegeben.

Weiterführende Literatur

Die IETF Best Current Practice OAuth 2.0 for Native Apps enthält viele der hier dokumentierten Best Practices.