Verwenden von OAuth 2.0 für den Zugriff auf Google APIs

Google APIs verwenden zur Authentifizierung und Autorisierung das OAuth 2.0-Protokoll. Google unterstützt gängige OAuth 2.0-Szenarien, z. B. für Webserver-, clientseitige, installierte und Geräteanwendungen mit begrenzter Eingabe.

Rufen Sie zuerst OAuth 2.0-Clientanmeldedaten aus der Google API Console ab. Ihre Clientanwendung fordert dann ein Zugriffstoken vom Google-Autorisierungsserver an, extrahiert ein Token aus der Antwort und sendet das Token an die Google API, auf die Sie zugreifen möchten. Wie Sie OAuth 2.0 mit Google verwenden (einschließlich der Option zur Verwendung Ihrer eigenen Client-Anmeldedaten), wird im OAuth 2.0 Playground interaktiv demonstriert.

Auf dieser Seite finden Sie eine Übersicht über die von Google unterstützten OAuth 2.0-Autorisierungsszenarien sowie Links zu detaillierteren Inhalten. Weitere Informationen zur Verwendung von OAuth 2.0 für die Authentifizierung finden Sie unter OpenID Connect.

Grundlegende Schritte

Alle Anwendungen folgen einem grundlegenden Muster, wenn sie mit OAuth 2.0 auf eine Google API zugreifen. Auf übergeordneter Ebene sind fünf Schritte erforderlich:

1. Rufen Sie OAuth 2.0-Anmeldedaten von der Google API Consoleab.

Rufen Sie die Google API Console auf, um OAuth 2.0-Anmeldedaten wie eine Client-ID und einen Clientschlüssel abzurufen, die sowohl Google als auch Ihrer Anwendung bekannt sind. Die Gruppe der Werte variiert je nach Art der Anwendung, die Sie entwickeln. Für eine JavaScript-Anwendung ist beispielsweise kein Secret erforderlich, für eine Webserveranwendung jedoch schon.

Sie müssen einen OAuth-Client erstellen, der für die Plattform geeignet ist, auf der Ihre App ausgeführt wird, z. B.:

2. Rufen Sie ein Zugriffstoken vom Google Authorization Server ab.

Bevor Ihre Anwendung mit einer Google API auf private Daten zugreifen kann, muss sie ein Zugriffstoken erhalten, das den Zugriff auf diese API gewährt. Ein einzelnes Zugriffstoken kann unterschiedliche Zugriffsebenen für mehrere APIs gewähren. Ein variabler Parameter namens scope steuert die Menge der Ressourcen und Vorgänge, die mit einem Zugriffstoken zulässig sind. Bei der Anfrage für das Zugriffstoken sendet Ihre Anwendung einen oder mehrere Werte im Parameter scope.

Es gibt verschiedene Möglichkeiten, diese Anfrage zu stellen. Sie variieren je nach Art der Anwendung, die Sie entwickeln. Eine JavaScript-Anwendung kann beispielsweise ein Zugriffstoken über eine Browserweiterleitung zu Google anfordern, während eine auf einem Gerät ohne Browser installierte Anwendung Webdienstanfragen verwendet.

Für einige Anfragen ist ein Authentifizierungsschritt erforderlich, bei dem sich der Nutzer mit seinem Google-Konto anmeldet. Nach der Anmeldung wird der Nutzer gefragt, ob er bereit ist, eine oder mehrere Berechtigungen zu erteilen, die Ihre Anwendung anfordert. Dieser Vorgang wird als Nutzereinwilligung bezeichnet.

Wenn der Nutzer mindestens eine Berechtigung erteilt, sendet der Google-Autorisierungsserver Ihrer Anwendung ein Zugriffstoken (oder einen Autorisierungscode, mit dem Ihre Anwendung ein Zugriffstoken abrufen kann) und eine Liste der mit diesem Token gewährten Zugriffsbereiche. Wenn der Nutzer die Berechtigung nicht erteilt, gibt der Server einen Fehler zurück.

Es empfiehlt sich, Bereiche inkrementell anzufordern, wenn der Zugriff erforderlich ist, anstatt im Voraus. Eine App, die das Speichern eines Termins in einem Kalender unterstützen möchte, sollte beispielsweise erst dann den Zugriff auf Google Kalender anfordern, wenn der Nutzer auf die Schaltfläche „Zum Kalender hinzufügen“ klickt. Weitere Informationen finden Sie unter Inkrementelle Autorisierung.

3. Prüfen Sie die vom Nutzer gewährten Zugriffsbereiche.

Vergleichen Sie die in der Zugriffstokenantwort enthaltenen Bereiche mit den Bereichen, die für den Zugriff auf Funktionen Ihrer Anwendung erforderlich sind, die von einem Zugriff auf eine zugehörige Google API abhängen. Deaktivieren Sie alle Funktionen Ihrer App, die ohne Zugriff auf die zugehörige API nicht funktionieren.

Der in Ihrer Anfrage enthaltene Bereich stimmt möglicherweise nicht mit dem in Ihrer Antwort enthaltenen Bereich überein, auch wenn der Nutzer alle angeforderten Bereiche gewährt hat. Informationen zu den für den Zugriff erforderlichen Bereichen finden Sie in der Dokumentation der jeweiligen Google API. Eine API kann mehrere Bereichs-Stringwerte einem einzelnen Zugriffsbereich zuordnen und für alle in der Anfrage zulässigen Werte denselben Bereichs-String zurückgeben. Beispiel: Die Google People API gibt möglicherweise den Bereich https://www.googleapis.com/auth/contacts zurück, wenn eine App einen Nutzer aufgefordert hat, den Bereich https://www.google.com/m8/feeds/ zu autorisieren. Für die Google People API-Methode people.updateContact ist der Bereich https://www.googleapis.com/auth/contacts erforderlich.

4. Senden Sie das Zugriffstoken an eine API.

Nachdem eine Anwendung ein Zugriffstoken erhalten hat, sendet sie das Token in einem HTTP-Autorisierungsanfrageheader an eine Google API. Es ist möglich, Tokens als URI-Suchparameter zu senden. Wir empfehlen dies jedoch nicht, da URI-Parameter in Protokolldateien landen können, die nicht vollständig sicher sind. Außerdem sollten Sie unnötige URI-Parameternamen vermeiden, da dies eine gute REST-Praxis ist.

Zugriffstokens sind nur für die in der scope der Tokenanfrage beschriebenen Vorgänge und Ressourcen gültig. Wenn beispielsweise ein Zugriffstoken für die Google Calendar API ausgestellt wird, gewährt es keinen Zugriff auf die Google Contacts API. Sie können dieses Zugriffstoken jedoch mehrmals für ähnliche Vorgänge an die Google Kalender API senden.

5. Aktualisieren Sie das Zugriffstoken, falls erforderlich.

Zugriffstokens haben eine begrenzte Lebensdauer. Wenn Ihre Anwendung über die Lebensdauer eines einzelnen Zugriffstokens hinaus Zugriff auf eine Google API benötigt, kann sie ein Aktualisierungstoken abrufen. Mit einem Aktualisierungstoken kann Ihre Anwendung neue Zugriffstokens abrufen.

Szenarien

Webserveranwendungen

Der Google OAuth 2.0-Endpunkt unterstützt Webserveranwendungen, die Sprachen und Frameworks wie PHP, Java, Go, Python, Ruby und ASP.NET verwenden.

Die Autorisierungssequenz beginnt, wenn Ihre Anwendung einen Browser zu einer Google-URL weiterleitet. Die URL enthält Abfrageparameter, die den angeforderten Zugriffstyp angeben. Google übernimmt die Nutzerauthentifizierung, die Auswahl der Sitzung und die Einwilligung des Nutzers. Das Ergebnis ist ein Autorisierungscode, den die Anwendung gegen ein Zugriffs- und ein Aktualisierungstoken eintauschen kann.

Die Anwendung sollte das Aktualisierungstoken für die zukünftige Verwendung speichern und das Zugriffstoken verwenden, um auf eine Google API zuzugreifen. Sobald das Zugriffstoken abläuft, verwendet die Anwendung das Aktualisierungstoken, um ein neues zu erhalten.

Ihre Anwendung sendet eine Tokenanfrage an den Google-Autorisierungsserver, empfängt einen Autorisierungscode, tauscht den Code gegen ein Token ein und verwendet das Token, um einen Google API-Endpunkt aufzurufen.

Weitere Informationen finden Sie unter OAuth 2.0 für Webserveranwendungen verwenden.

Installierte Apps

Der Google OAuth 2.0-Endpunkt unterstützt Anwendungen, die auf Geräten wie Computern, Smartphones und Tablets installiert sind. Wenn Sie eine Client-ID über die Google API Console erstellen, geben Sie an, dass es sich um eine installierte Anwendung handelt, und wählen Sie dann Android, Chrome-App, iOS, Universal Windows Platform (UWP) oder Desktop-App als Anwendungstyp aus.

Bei diesem Vorgang werden eine Client-ID und in einigen Fällen ein Clientschlüssel generiert, die Sie in den Quellcode Ihrer Anwendung einbetten. In diesem Kontext wird der Clientschlüssel natürlich nicht als Secret behandelt.

Die Autorisierungssequenz beginnt, wenn Ihre Anwendung einen Browser zu einer Google-URL weiterleitet. Die URL enthält Abfrageparameter, die den angeforderten Zugriffstyp angeben. Google übernimmt die Nutzerauthentifizierung, die Auswahl der Sitzung und die Einwilligung des Nutzers. Das Ergebnis ist ein Autorisierungscode, den die Anwendung gegen ein Zugriffs- und ein Aktualisierungstoken eintauschen kann.

Die Anwendung sollte das Aktualisierungstoken für die zukünftige Verwendung speichern und das Zugriffstoken verwenden, um auf eine Google API zuzugreifen. Sobald das Zugriffstoken abläuft, verwendet die Anwendung das Aktualisierungstoken, um ein neues zu erhalten.

Ihre Anwendung sendet eine Tokenanfrage an den Google-Autorisierungsserver, empfängt einen Autorisierungscode, tauscht den Code gegen ein Token ein und verwendet das Token, um einen Google API-Endpunkt aufzurufen.

Weitere Informationen finden Sie unter OAuth 2.0 für installierte Anwendungen verwenden.

Clientseitige (JavaScript-)Anwendungen

Der Google OAuth 2.0-Endpunkt unterstützt JavaScript-Anwendungen, die in einem Browser ausgeführt werden.

Die Autorisierungssequenz beginnt, wenn Ihre Anwendung einen Browser zu einer Google-URL weiterleitet. Die URL enthält Abfrageparameter, die den angeforderten Zugriffstyp angeben. Google übernimmt die Nutzerauthentifizierung, die Auswahl der Sitzung und die Einwilligung des Nutzers.

Das Ergebnis ist ein Zugriffstoken, das der Client validieren sollte, bevor er es in eine Google API-Anfrage einfügt. Wenn das Token abläuft, wiederholt die Anwendung den Vorgang.

Ihre JS-Anwendung sendet eine Tokenanfrage an den Google-Autorisierungsserver, empfängt ein Token, validiert das Token und ruft mit dem Token einen Google API-Endpunkt auf.

Weitere Informationen finden Sie unter OAuth 2.0 für clientseitige Anwendungen verwenden.

Anwendungen auf Geräten mit begrenzter Eingabe

Der Google OAuth 2.0-Endpunkt unterstützt Anwendungen, die auf Geräten mit eingeschränkter Eingabe wie Spielekonsolen, Videokameras und Druckern ausgeführt werden.

Die Autorisierungssequenz beginnt damit, dass die Anwendung eine Webdienstanfrage an eine Google-URL für einen Autorisierungscode sendet. Die Antwort enthält mehrere Parameter, darunter eine URL und einen Code, die der Nutzer in der Anwendung sieht.

Der Nutzer ruft die URL und den Code auf dem Gerät ab und wechselt dann zu einem separaten Gerät oder Computer mit besseren Eingabefunktionen. Der Nutzer startet einen Browser, ruft die angegebene URL auf, meldet sich an und gibt den Code ein.

In der Zwischenzeit fragt die Anwendung in einem bestimmten Intervall eine Google-URL ab. Nachdem der Nutzer den Zugriff genehmigt hat, enthält die Antwort des Google-Servers ein Zugriffstoken und ein Aktualisierungstoken. Die Anwendung sollte das Aktualisierungstoken für die zukünftige Verwendung speichern und das Zugriffstoken verwenden, um auf eine Google-API zuzugreifen. Sobald das Zugriffstoken abläuft, verwendet die Anwendung das Aktualisierungstoken, um ein neues zu erhalten.

Der Nutzer meldet sich auf einem separaten Gerät mit einem Browser an.

Weitere Informationen finden Sie unter OAuth 2.0 für Geräte verwenden.

Dienstkonten

Google-APIs wie die Prediction API und Google Cloud Storage können im Namen Ihrer Anwendung agieren, ohne auf Nutzerinformationen zuzugreifen. In diesen Fällen muss Ihre Anwendung ihre eigene Identität gegenüber der API nachweisen, aber es ist keine Einwilligung des Nutzers erforderlich. In Unternehmensszenarien kann Ihre Anwendung ebenfalls delegierten Zugriff auf einige Ressourcen anfordern.

Für diese Arten von Server-zu-Server-Interaktionen benötigen Sie ein Dienstkonto. Ein solches Konto ist einer Anwendung zugeordnet und nicht einem bestimmten Endnutzer. Ihre Anwendung ruft Google-APIs im Namen des Dienstkontos auf und es ist keine Einwilligung des Nutzers erforderlich. In Szenarien ohne Dienstkonto ruft Ihre Anwendung Google-APIs im Namen von Endnutzern auf. In diesem Fall ist manchmal eine Einwilligung des Nutzers erforderlich.

Die Anmeldedaten eines Dienstkontos, die Sie von Google API Consoleerhalten, enthalten eine generierte E-Mail-Adresse, die eindeutig ist, eine Client-ID und mindestens ein öffentliches/privates Schlüsselpaar. Sie verwenden die Client-ID und einen privaten Schlüssel, um ein signiertes JWT zu erstellen und eine Zugriffstokenanfrage im entsprechenden Format zu erstellen. Ihre Anwendung sendet die Tokenanfrage dann an den Google OAuth 2.0-Autorisierungsserver, der ein Zugriffstoken zurückgibt. Die Anwendung verwendet das Token, um auf eine Google-API zuzugreifen. Wenn das Token abläuft, wiederholt die Anwendung den Vorgang.

Ihre Serveranwendung verwendet ein JWT, um ein Token vom Google-Autorisierungsserver anzufordern. Anschließend wird das Token verwendet, um einen Google-API-Endpunkt aufzurufen. Es ist kein Endnutzer beteiligt.

Weitere Informationen finden Sie in der Dokumentation zu Dienstkonten.

Token-Größe

Die Größe von Tokens kann variieren, bis zu den folgenden Grenzwerten:

  • code Autorisierungscodes
    256 Bytes
  • contextual_token Zugriffstokens
    2.048 Byte
  • restore_page Aktualisierungstokens
    512 Byte

Von der Security Token Service API von Google Cloud zurückgegebene Zugriffstokens sind ähnlich strukturiert wie OAuth 2.0-Zugriffstokens für Google APIs, haben aber andere Tokengrößenlimits. Weitere Informationen finden Sie in der API-Dokumentation.

Google behält sich das Recht vor, die Tokengröße innerhalb dieser Grenzen zu ändern. Ihre Anwendung muss daher variable Tokengrößen unterstützen.

Ablauf des Aktualisierungstokens

Sie müssen Ihren Code so schreiben, dass er auf die Möglichkeit vorbereitet ist, dass ein gewährtes Aktualisierungstoken nicht mehr funktioniert. Ein Aktualisierungstoken kann aus einem der folgenden Gründe nicht mehr funktionieren:

Für ein Google Cloud-Projekt mit einem OAuth-Zustimmungsbildschirm, der für einen externen Nutzertyp konfiguriert ist, und einem Veröffentlichungsstatus von „Testen“ wird ein Aktualisierungstoken ausgestellt, das nach 7 Tagen abläuft, es sei denn, die einzigen angeforderten OAuth-Bereiche sind eine Teilmenge von Name, E-Mail-Adresse und Nutzerprofil (über die userinfo.email, userinfo.profile, openid-Bereiche oder ihre OpenID Connect-Entsprechungen).

Derzeit gilt ein Limit von 100 Aktualisierungstokens pro Google-Konto und OAuth 2.0-Client-ID. Wenn die Beschränkung erreicht wurde, wird das älteste Aktualisierungstoken beim Erstellen eines neuen automatisch und ohne Warnung ungültig. Dieses Limit gilt nicht für Dienstkonten.

Außerdem gilt ein höheres Limit für die Gesamtzahl der Aktualisierungstokens, die ein Nutzerkonto oder Dienstkonto für alle Clients haben kann. Die meisten normalen Nutzer überschreiten dieses Limit nicht. Das Konto eines Entwicklers, das zum Testen einer Implementierung verwendet wird, kann es jedoch überschreiten.

Wenn Sie mehrere Programme, Computer oder Geräte autorisieren müssen, können Sie die Anzahl der Clients, die Sie pro Google-Konto autorisieren, auf 15 oder 20 begrenzen. Wenn Sie Google Workspace-Administrator sind, können Sie zusätzliche Nutzer mit Administratorberechtigungen erstellen und diese verwenden, um einige der Clients zu autorisieren.

Umgang mit Richtlinien zur Sitzungssteuerung für Google Cloud Platform-Organisationen (GCP)

Administratoren von GCP-Organisationen können mit der Google Cloud-Sitzungssteuerung festlegen, dass Nutzer sich häufig neu authentifizieren müssen, wenn sie auf GCP-Ressourcen zugreifen. Diese Richtlinie wirkt sich auf den Zugriff auf die Google Cloud Console, das Google Cloud SDK (auch bekannt als gcloud CLI) und alle OAuth-Drittanbieteranwendungen aus, für die der Cloud Platform-Bereich erforderlich ist. Wenn für einen Nutzer eine Richtlinie zur Sitzungssteuerung eingerichtet ist, schlagen Ihre API-Aufrufe nach Ablauf der Sitzungsdauer fehl, ähnlich wie bei einem widerrufenen Aktualisierungstoken. Der Aufruf schlägt mit dem Fehlertyp invalid_grant fehl. Das Feld error_subtype kann verwendet werden, um zwischen einem widerrufenen Token und einem Fehler aufgrund einer Richtlinie zur Sitzungssteuerung zu unterscheiden (z. B. "error_subtype": "invalid_rapt"). Da die Sitzungsdauern sehr kurz sein können (zwischen 1 und 24 Stunden), muss dieses Szenario ordnungsgemäß behandelt werden, indem eine Authentifizierungssitzung neu gestartet wird.

Ebenso dürfen Sie Nutzeranmeldedaten nicht für die Server-zu-Server-Bereitstellung verwenden oder die Verwendung von Nutzeranmeldedaten für die Server-zu-Server-Bereitstellung fördern. Wenn Nutzeranmeldedaten auf einem Server für lang andauernde Jobs oder Vorgänge bereitgestellt werden und ein Kunde Richtlinien zur Sitzungssteuerung auf solche Nutzer anwendet, schlägt die Serveranwendung fehl, da der Nutzer nach Ablauf der Sitzungsdauer nicht neu authentifiziert werden kann.

Weitere Informationen dazu, wie Sie Ihren Kunden bei der Bereitstellung dieser Funktion helfen können, finden Sie in diesem Hilfeartikel für Administratoren.

Clientbibliotheken

Die folgenden Clientbibliotheken lassen sich in gängige Frameworks einbinden, was die Implementierung von OAuth 2.0 vereinfacht. Im Laufe der Zeit werden den Bibliotheken weitere Funktionen hinzugefügt.