OAuth 2.0 für iOS- 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 Google APIs zu autorisieren.

OAuth 2.0 ermöglicht Nutzern, bestimmte Daten für eine Anwendung freizugeben, während ihre Nutzernamen, Passwörter und andere Informationen privat bleiben. Eine Anwendung kann beispielsweise OAuth 2.0 verwenden, um von Nutzern die Berechtigung zum Speichern von Dateien in Google Drive zu erhalten.

Installierte Apps werden auf einzelne Geräte verteilt und es wird davon ausgegangen, dass diese Apps keine Geheimnisse bewahren können. Sie können auf Google APIs zugreifen, während der Nutzer die App verwendet oder wenn die App im Hintergrund ausgeführt wird.

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

Bibliotheken und Beispiele

Für iOS-Apps empfehlen wir die Verwendung der aktuellen Version des Über Google anmelden iOS SDK. Das SDK übernimmt die Nutzerautorisierung und ist einfacher zu implementieren als das in diesem Leitfaden beschriebene Protokoll auf niedrigerer Ebene.

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

Vorbereitung

Die APIs für Ihr Projekt aktivieren

Für jede Anwendung, die Google APIs aufruft, müssen diese APIs in der API Console aktiviert werden.

So aktivieren Sie eine API für Ihr Projekt:

  1. Öffnen Sie die API-Bibliothek in der Google API Console.
  2. Wählen Sie ein Projekt aus oder erstellen Sie ein neues, wenn Sie dazu aufgefordert werden.
  3. In der API-Bibliothek finden Sie alle verfügbaren APIs, gruppiert nach Produktfamilie und Beliebtheit. Wenn die API, die Sie aktivieren möchten, nicht in der Liste angezeigt wird, können Sie die Suchfunktion verwenden oder in der Produktfamilie, zu der sie gehört, auf Alle ansehen klicken.
  4. Wählen Sie die gewünschte API aus und klicken Sie dann auf den Button Aktivieren.
  5. Aktivieren Sie die Abrechnung, wenn Sie dazu aufgefordert werden.
  6. Lesen und akzeptieren Sie die Nutzungsbedingungen der API, wenn Sie dazu aufgefordert werden.

Anmeldedaten für die Autorisierung erstellen

Jede Anwendung, die OAuth 2.0 für den Zugriff auf Google APIs verwendet, muss über Autorisierungsdaten verfügen, mit denen sie sich beim OAuth 2.0-Server von Google identifiziert. 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 dieses Projekt aktiviert haben.

  1. Rufen Sie die Seite „Clients“ auf.
  2. Klicken Sie auf Client erstellen.
  3. In den folgenden Abschnitten werden die Clienttypen beschrieben, die vom Autorisierungsserver von Google unterstützt werden. Wählen Sie den für Ihre Anwendung empfohlenen Clienttyp aus, benennen Sie Ihren OAuth-Client und füllen Sie die anderen Felder im Formular entsprechend aus.
iOS
  1. Wählen Sie den Anwendungstyp iOS aus.
  2. Geben Sie einen Namen für den OAuth-Client ein. Dieser Name wird auf der Seite „Clients“ Ihres Projekts angezeigt, um den Client zu identifizieren.
  3. Geben Sie den Paket-Identifikator für Ihre App ein. Die Paket-ID ist der Wert des Schlüssels CFBundleIdentifier in der Informations-Property-List-Ressourcendatei (info.plist) Ihrer App. Der Wert wird am häufigsten im Bereich „General“ oder „Signing & Capabilities“ des Xcode-Projekteditors angezeigt. Die Paket-ID wird auch im Bereich „Allgemeine Informationen“ auf der Seite „App-Informationen“ für die App auf der App Store Connect-Website von Apple angezeigt.

    Prüfen Sie, ob Sie die richtige Paket-ID für Ihre App verwenden. Wenn Sie die App Check-Funktion verwenden, können Sie die ID nicht mehr ändern.

  4. (Optional)

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

    1. Öffnen Sie auf Ihrem iOS- oder iPadOS-Gerät die Apple App Store App.
    2. Suchen Sie nach Ihrer App.
    3. Wähle die Schaltfläche „Teilen“ aus (Quadrat mit Pfeil nach oben).
    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)

    Geben Sie Ihre Team-ID ein. Weitere Informationen finden Sie in der Dokumentation zum Apple-Entwicklerkonto unter Team-ID ermitteln.

    Hinweis:Das Feld „Team-ID“ ist erforderlich, wenn Sie App Check für Ihren Client aktivieren.
  6. (Optional)

    Aktivieren Sie App Check für Ihre iOS-App. Wenn Sie App Check aktivieren, wird der App Attest-Dienst von Apple verwendet, um zu prüfen, ob OAuth 2.0-Anfragen, die von Ihrem OAuth-Client stammen, echt sind und von Ihrer App stammen. Dadurch wird das Risiko von App-Imitaten verringert. Weitere Informationen zum Aktivieren von App Check für Ihre iOS-App

  7. Klicken Sie auf Erstellen.
Computer
  1. Wählen Sie den Anwendungstyp Desktop-Anwendung aus.
  2. Geben Sie im Feld Name einen Namen für den OAuth-Client ein. Dieser Name wird auf der Seite „Clients“ Ihres Projekts angezeigt, um den Client zu identifizieren.
  3. Klicken Sie auf Erstellen.

Zugriffsbereiche identifizieren

Mit Bereichen kann Ihre Anwendung nur Zugriff auf die Ressourcen anfordern, die sie benötigt. Außerdem können Nutzer so den Umfang des Zugriffs steuern, den sie Ihrer Anwendung gewähren. Es kann also eine umgekehrte Beziehung zwischen der Anzahl der angeforderten Bereiche und der Wahrscheinlichkeit geben, dass die Nutzereinwilligung erteilt wird.

Bevor Sie mit der Implementierung der OAuth 2.0-Autorisierung beginnen, sollten Sie die Bereiche ermitteln, für die Ihre App Zugriffsberechtigungen benötigt.

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

In den folgenden Schritten wird gezeigt, wie Ihre 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 einholen, bevor sie eine Google API-Anfrage ausführen kann, für die eine Nutzerautorisierung erforderlich ist.

Schritt 1: Code-Verifier und Challenge generieren

Google unterstützt das PKCE-Protokoll (Proof Key for Code Exchange), um den Ablauf für installierte Apps sicherer zu machen. Für jede Autorisierungsanfrage wird ein eindeutiger Code-Verifier erstellt. Der transformierte Wert, der als „code_challenge“ bezeichnet wird, wird an den Autorisierungsserver gesendet, um den Autorisierungscode zu erhalten.

Code-Verifier erstellen

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

Der Code-Verifier sollte genügend Entropie haben, damit es unmöglich ist, den Wert zu erraten.

Code-Challenge erstellen

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

Methoden zur Generierung von Code-Challenges
S256 (empfohlen) Die Code-Challenge ist der Base64URL-codierte SHA256-Hash (ohne Padding) des Code-Verifiers.
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
plain Die Code-Challenge hat denselben Wert wie der oben generierte Code-Verifier.
code_challenge = code_verifier

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

Wenn Sie die Nutzerautorisierung einholen möchten, senden Sie eine Anfrage an den Autorisierungsserver von Google unter https://accounts.google.com/o/oauth2/v2/auth. Dieser Endpunkt verarbeitet die Suche nach aktiven Sitzungen, authentifiziert den Nutzer und holt die Nutzereinwilligung ein. Der Endpunkt ist nur über SSL zugänglich und lehnt HTTP-Verbindungen (ohne 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 Cloud Console auf der Seite „Clients“.

redirect_uri Erforderlich

Bestimmt, wie der Autorisierungsserver von Google eine Antwort an Ihre App sendet. Für installierte Apps sind mehrere Weiterleitungsoptionen verfügbar. Sie haben Ihre Anmeldedaten für die Autorisierung mit einer bestimmten Weiterleitungsmethode eingerichtet.

Der Wert muss genau mit einem der autorisierten Weiterleitungs-URIs für den OAuth 2.0-Client übereinstimmen, den Sie in der Cloud Console auf der Seite „Clients“ Ihres Clients konfiguriert haben. Wenn dieser Wert nicht mit einem autorisierten URI übereinstimmt, wird der Fehler redirect_uri_mismatch angezeigt.

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

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 Reverse-DNS-Notation einer Domain, die Sie kontrollieren. Das benutzerdefinierte Schema muss einen Punkt enthalten, um gültig zu sein.
  • com.googleusercontent.apps.123 ist die Reverse-DNS-Notation der Client-ID.
  • redirect_uri_path ist eine optionale Pfadkomponente, z. B. /oauth2redirect. Beachten Sie, dass der Pfad mit einem einzelnen Schrägstrich beginnen muss, was sich von regulären HTTP-URLs unterscheidet.
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 tatsächliche Portnummer, die Ihre Anwendung überwacht.

Die Unterstützung für die Weiterleitungsoption für die Loopback-IP-Adresse in mobilen Apps ist VERWORFEN.

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 kann. Diese Werte werden auf dem Zustimmungsbildschirm angezeigt, den Google dem Nutzer präsentiert.

Mit Bereichen kann Ihre Anwendung nur Zugriff auf die Ressourcen anfordern, die sie benötigt. Außerdem können Nutzer so den Umfang des Zugriffs steuern, den sie Ihrer Anwendung gewähren. Es besteht also eine umgekehrte Beziehung zwischen der Anzahl der angeforderten Bereiche und der Wahrscheinlichkeit, dass die Nutzereinwilligung erteilt wird.

code_challenge Empfohlen

Gibt eine codierte code_verifier an, die beim Austausch des Autorisierungscodes als serverseitige Challenge verwendet wird. Weitere Informationen finden Sie unter Code-Challenge erstellen.

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 Parameter code_challenge verwendet werden. Der Wert von code_challenge_method ist standardmäßig plain, wenn er nicht in der Anfrage enthalten ist, die einen code_challenge enthält. Die einzigen unterstützten Werte für diesen Parameter sind S256 oder plain.

state Empfohlen

Gibt einen beliebigen Stringwert an, den Ihre Anwendung verwendet, um den Status zwischen Ihrer Autorisierungsanfrage und der Antwort des Autorisierungsservers beizubehalten. Der Server gibt den genauen Wert zurück, den Sie als name=value-Paar im URL-Fragmentbezeichner (#) der redirect_uri senden, nachdem der Nutzer die Zugriffsanfrage Ihrer Anwendung genehmigt oder 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 Anfragen zu verhindern. Da Ihre redirect_uri erraten werden kann, können Sie mit einem state-Wert die Wahrscheinlichkeit 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 sicherzustellen, dass die Anfrage und die Antwort vom selben Browser stammen. So können Sie sich vor Angriffen wie websiteübergreifende Anfragefälschung schützen. Ein Beispiel für das Erstellen und Bestätigen eines state-Tokens finden Sie in der Dokumentation zu OpenID Connect.

login_hint Optional

Wenn Ihre Anwendung weiß, welcher Nutzer versucht, sich zu authentifizieren, kann sie diesen Parameter verwenden, um dem Google-Authentifizierungsserver einen Hinweis zu geben. Der Server verwendet den Hinweis, um den Anmeldevorgang zu vereinfachen, indem er entweder das E-Mail-Feld im Anmeldeformular vorausfüllt oder die entsprechende Multi-Login-Sitzung auswählt.

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

Beispiel-Autorisierungs-URLs

Auf den Tabs unten finden Sie Beispiel-Autorisierungs-URLs für die verschiedenen Weiterleitungs-URI-Optionen.

Die URLs sind bis auf den Wert des Parameters redirect_uri identisch. Die URLs enthalten auch die erforderlichen Parameter response_type und client_id sowie den optionalen Parameter state. Jede URL enthält Zeilenumbrüche und Leerzeichen, um die Lesbarkeit zu verbessern.

Benutzerdefiniertes URI-Schema

https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 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=email%20profile&
 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 auf, seine Einwilligung zu erteilen

In diesem Schritt entscheidet der Nutzer, ob er Ihrer Anwendung den angeforderten Zugriff gewährt. In dieser Phase zeigt Google ein Zustimmungsfenster an, in dem der Name Ihrer Anwendung und die Google API-Dienste, für die sie mit den Autorisierungsdaten des Nutzers Zugriff anfordert, sowie eine Zusammenfassung der zu gewährenden Zugriffsbereiche aufgeführt sind. Der Nutzer kann dann zustimmen, den Zugriff auf einen oder mehrere von Ihrer Anwendung angeforderte Bereiche zu gewähren, oder die Anfrage ablehnen.

Ihre Anwendung muss in dieser Phase nichts tun, während sie auf die Antwort des OAuth 2.0-Servers von Google wartet, die angibt, ob Zugriff gewährt wurde. Diese Antwort wird im folgenden Schritt erläutert.

Fehler

Bei Anfragen an den OAuth 2.0-Autorisierungsendpunkt von Google werden möglicherweise Fehlermeldungen für Nutzer angezeigt, anstatt der erwarteten Authentifizierungs- und Autorisierungsabläufe. Häufige Fehlercodes und Lösungsvorschläge:

admin_policy_enforced

Das Google-Konto kann aufgrund der Richtlinien des Google Workspace-Administrators einen oder mehrere angeforderte Bereiche nicht autorisieren. Weitere Informationen dazu, wie ein Administrator den Zugriff auf alle Bereiche oder auf sensible und eingeschränkte Bereiche einschränken kann, bis der Zugriff explizit für Ihre OAuth-Client-ID gewährt wird, finden Sie im Hilfeartikel für Google Workspace-Administratoren Festlegen, welche Apps auf Google Workspace-Daten zugreifen können.

disallowed_useragent

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

iOS- und macOS-Entwickler können diesen Fehler beim Öffnen von Autorisierungsanfragen in WKWebView erhalten. Entwickler sollten stattdessen iOS-Bibliotheken wie Google Log-in für iOS oder AppAuth für iOS der OpenID Foundation verwenden.

Webentwickler können auf diesen Fehler stoßen, wenn eine iOS- oder macOS-App einen allgemeinen Weblink in einem eingebetteten User-Agent öffnet und ein Nutzer von Ihrer Website zum OAuth 2.0-Autorisierungsendpunkt von Google navigiert. Entwickler sollten zulassen, dass allgemeine Links im Standard-Link-Handler des Betriebssystems geöffnet werden. Dazu gehören sowohl Universal Links-Handler als auch die Standardbrowser-App. Die SFSafariViewController-Bibliothek ist ebenfalls eine unterstützte Option.

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.

deleted_client

Der OAuth-Client, der zum Senden der Anfrage verwendet wird, wurde gelöscht. Das Löschen kann manuell oder im Fall von nicht verwendeten Clients automatisch erfolgen. Gelöschte Clients können innerhalb von 30 Tagen nach dem Löschen wiederhergestellt werden. Weitere Informationen

invalid_grant

Wenn Sie einen Code-Verifier und eine Code-Challenge verwenden, ist der Parameter code_callenge ungültig oder fehlt. Achten Sie darauf, dass der Parameter code_challenge richtig festgelegt ist.

Beim Aktualisieren eines Zugriffstokens ist das Token möglicherweise abgelaufen oder wurde ungültig gemacht. Authentifizieren Sie den Nutzer noch einmal und bitten Sie ihn um seine Einwilligung, um neue Tokens zu erhalten. Wenn dieser Fehler weiterhin auftritt, prüfen Sie, ob Ihre Anwendung richtig konfiguriert ist und ob 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 nicht mit einem autorisierten Weiterleitungs-URI für die OAuth-Client-ID überein. Prüfen Sie die autorisierten Weiterleitungs-URIs auf der Seite „Clients“ in der Google Cloud Console.

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

Der Parameter redirect_uri bezieht sich möglicherweise auf den OAuth-Out-of-Band-Ablauf (OOB), der eingestellt wurde und nicht mehr unterstützt wird. Informationen zum Aktualisieren Ihrer Integration finden Sie in der Migrationsanleitung.

invalid_request

Bei Ihrer Anfrage ist ein Fehler aufgetreten. Das kann verschiedene Gründe haben:

  • Die Anfrage war nicht richtig formatiert.
  • In der Anfrage fehlten erforderliche Parameter.
  • Für die Anfrage wird eine Autorisierungsmethode verwendet, die von Google nicht unterstützt wird. Prüfen, ob für Ihre OAuth-Integration eine empfohlene Integrationsmethode verwendet wird
  • Für den Weiterleitungs-URI wurde ein nicht unterstütztes benutzerdefiniertes Schema verwendet. Wenn Sie die Fehlermeldung Benutzerdefiniertes URI-Schema wird in Android- oder Chrome-Apps nicht unterstützt sehen, erfahren Sie hier mehr über Alternativen zu benutzerdefinierten URI-Schemas.

Schritt 4: OAuth 2.0-Serverantwort verarbeiten

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

Wenn der Nutzer Ihrer Anwendung Zugriff gewährt, können Sie den Autorisierungscode gegen ein Zugriffstoken und ein Aktualisierungstoken austauschen, wie im nächsten Schritt beschrieben.

Schritt 5: Autorisierungscode gegen Aktualisierungs- und Zugriffstokens austauschen

Wenn Sie einen Autorisierungscode gegen ein Zugriffstoken eintauschen möchten, rufen Sie den Endpunkt https://oauth2.googleapis.com/token auf und legen Sie die folgenden Parameter fest:

Felder
client_id Die Client-ID, die Sie auf der Seite „Clients“ in der Cloud Console erhalten haben.
client_secret Optional

Der Clientschlüssel, der auf der Seite „Clients“ der Cloud Console abgerufen wurde.

code Der Autorisierungscode, der von der ersten Anfrage zurückgegeben wurde.
code_verifier Der Code-Verifier, den Sie in Schritt 1 erstellt haben.
grant_type Wie in der OAuth 2.0-Spezifikation definiert, muss der Wert dieses Felds auf authorization_code festgelegt werden.
redirect_uri Einer der Weiterleitungs-URIs, die für Ihr Projekt in der Cloud Console auf der Seite „Clients“ für die angegebene client_id aufgeführt sind.

Die Verwendung von DPoP ist optional, wird aber für mehr Sicherheit empfohlen. Die Sicherheit von DPoP beruht darauf, dass der private Schlüssel auf ein einzelnes Gerät beschränkt ist. Wir empfehlen, ihn so zu speichern, dass er nicht vom Gerät kopiert werden kann, z. B. mithilfe von TPMs, Secure Enclaves oder anderen hardwaregestützten Schlüsselspeichern. Wenn Sie DPoP verwenden möchten, muss Ihre Anwendung für jede Anfrage an den Token-Endpunkt ein neues, eindeutiges DPoP-Proof-JWT generieren und als HTTP-Anfrageheader hinzufügen.

Header Erforderlich Beschreibung
DPoP Optional Ein DPoP-Proof ist ein JWT, das den Besitz eines privaten Schlüssels belegt. Dies ist ein Header, kein Parameter. Falls angegeben, sind die zurückgegebenen Tokens an diesen Schlüssel gebunden. Für jede Anfrage muss ein neuer, eindeutiger Nachweis generiert werden, der die Claims htm (HTTP-Methode) und htu (HTTP-URI) enthält, die der Anfrage entsprechen.

Das folgende Snippet zeigt eine Beispielanfrage:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik\
 VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR\
 nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE\
 QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj\
 oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia\
 WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg\
 4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg

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

DPoP-Proof erstellen

In den folgenden Schritten wird gezeigt, wie Sie einen DPoP-Proof mit OpenSSL über die Befehlszeile erstellen:

  1. Generieren Sie ein EC-P-256-Schlüsselpaar:
    openssl ecparam -name prime256v1 -genkey -noout -out dpop_private.pem
    openssl ec -in dpop_private.pem -pubout -out dpop_public.pem
  2. DPoP-Header erstellen:

    Der Header muss die Anforderungen typ, alg und jwk (öffentlicher Schlüssel) enthalten. Die Werte x und y sind die Base64Url-codierten Koordinaten Ihres öffentlichen EC-Schlüssels. Codieren Sie diesen JSON-Code mit Base64Url:

    {
      "typ":"dpop+jwt",
      "alg":"ES256",
      "jwk": {
        "kty":"EC",
        "x":"YOUR_PUBLIC_KEY_X",
        "y":"YOUR_PUBLIC_KEY_Y",
        "crv":"P-256"
      }
    }
  3. DPoP-Nutzlast erstellen:

    Die Nutzlast muss jti (eine eindeutige Kennung für die Anfrage), htm (HTTP-Methode, z.B. POST), htu (HTTP-URI, z.B. https://oauth2.googleapis.com/token) und iat (Ausstellungszeitpunkt) enthalten. Wenn Sie vom Server in einem DPoP-Nonce-Header in der Antwort auf eine vorherige Anfrage eine Nonce erhalten haben, müssen Sie diesen Nonce-Wert in eine nonce-Anforderung einfügen. Der Nonce-Anspruch ist für den Austausch von Autorisierungscodes optional und wird nur verwendet, wenn der DPoP-Nonce-Header zuvor empfangen wurde. Codieren Sie diesen JSON-Code mit Base64Url:

    {
      "jti":"JTI_VALUE",
      "htm":"POST",
      "htu":"https://oauth2.googleapis.com/token",
      "iat":YOUR_JWT_ISSUED_TIME,
      "nonce":"SERVER_PROVIDED_NONCE"
    }

    Der Wert jti hängt vom Typ der Anzeigenplattform ab:

    • Bei Autorisierungscode-Austauschen muss der jti der Base64Url-codierte SHA256-Hash des Autorisierungscodes sein: "jti":"BASE64URL(SHA256(AUTHORIZATION_CODE))".
    • Für den Austausch von Aktualisierungstokens muss die jti eine eindeutige Kennung pro Anfrage sein: "jti":"YOUR_UNIQUE_PER_REQUEST_IDENTIFIER".
  4. Nachweis signieren:

    Verketten Sie den codierten Header und die Nutzlast mit einem Punkt (.) und signieren Sie das Ergebnis dann mit Ihrem privaten Schlüssel mithilfe von ES256. Beachten Sie, dass die Signatur für JWS in einem unformatierten, verketteten R | S-Format vorliegen muss (64 Byte für P-256). Wenn Sie OpenSSL direkt verwenden, müssen Sie die standardmäßige ASN.1-DER-codierte Signatur in dieses Rohformat konvertieren.

Ein erfolgreicher Austausch wird durch eine 200 OK-Antwort mit den Tokens angezeigt. Wenn während des Austauschs ein gültiger DPoP-Nachweis verwendet wird, ist das von Google zurückgegebene Aktualisierungstoken per DPoP an Ihren Schlüssel gebunden, Zugriffstokens jedoch nicht. Zugriffstokens behalten den token_type von Bearer anstelle von DPoP bei. Außerdem gibt Google in der Antwort einen DPoP-Nonce-HTTP-Header zurück. Ihr Client muss diese Nonce im Cache speichern und sie in nachfolgenden Anfragen (z. B. beim Austausch eines Aktualisierungstokens gegen ein neues Zugriffstoken oder beim Aufrufen von DPoP-geschützten APIs) in den nonce-Claim des DPoP-Proofs einfügen. Durch die Verwendung dieser frühzeitig ausgegebenen Nonce können Sie einen zusätzlichen Roundtrip-Fehler (use_dpop_nonce) bei Ihrer nächsten Anfrage vermeiden.

DPoP-Nachweise müssen für Tokenaustauschanfragen enthalten sein, die mit DPoP-gebundenen Aktualisierungstokens gestellt werden.

Ein fehlgeschlagener Austausch tritt auf, wenn der Header DPoP fehlt, obwohl er erwartet wird, ungültig ist oder wenn der Nachweis einen anderen Schlüssel als den an das Token gebundenen Schlüssel verwendet. In diesen Fällen gibt der Server den Fehler 400 Bad Request zurück. Wenn der DPoP-Proof nicht übereinstimmende htm- oder htu-Ansprüche, einen abgelaufenen iat, einen wiederverwendeten jti oder eine ungültige Signatur enthält, gibt Google den Fehlercode invalid_dpop_proof zurück. Wenn eine DPoP-Nonce erforderlich ist, z. B. während eines Aktualisierungstoken-Austauschs, und im DPoP-Proof ein nonce-Claim fehlt oder der Nonce-Wert für den Server nicht akzeptabel ist (z. B. abgelaufen, bereits verwendet oder falsch), gibt Google den Fehlercode use_dpop_nonce zusammen mit dem HTTP-Header DPoP-Nonce zurück, der eine neue Nonce enthält, die Sie in einer nachfolgenden Anfrage verwenden können. Bei anderen Fehlern wird möglicherweise invalid_grant zurückgegeben.

Google antwortet auf diese Anfrage mit einem JSON-Objekt, das ein kurzlebiges Zugriffstoken und ein Aktualisierungstoken enthält.

Die Antwort umfasst die folgenden Felder:

Felder
access_token Das Token, das Ihre Anwendung zur Autorisierung einer Google API-Anfrage sendet.
expires_in Die verbleibende Lebensdauer des Zugriffstokens in Sekunden.
id_token Hinweis: Diese Property wird nur zurückgegeben, wenn Ihre Anfrage einen Identitätsbereich wie openid, profile oder email enthielt. Der Wert ist ein JSON Web Token (JWT), das digital signierte Identitätsinformationen zum 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 oder das Aktualisierungstoken abläuft. Wenn DPoP verwendet wurde, ist das Aktualisierungstoken an den privaten Schlüssel gebunden, der zum Signieren des DPoP-Nachweises verwendet wurde. Beachten Sie, dass für installierte Anwendungen immer Aktualisierungstokens zurückgegeben werden.
refresh_token_expires_in Die verbleibende Lebensdauer des Aktualisierungstokens in Sekunden. Dieser Wert wird nur festgelegt, wenn der Nutzer zeitbasierten Zugriff gewährt.
scope Die Zugriffsbereiche, die vom access_token gewährt werden, ausgedrückt als Liste von durch Leerzeichen getrennten Strings, bei denen die Groß-/Kleinschreibung beachtet wird.
token_type Der Typ des zurückgegebenen Tokens. Dieser Wert ist immer Bearer, auch wenn DPoP verwendet wird.

Das folgende Snippet zeigt ein Beispiel für erfolgreiche Antwortheader und einen Antworttext, wenn DPoP verwendet wird:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly",
  "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

Schritt 6: Prüfen, welche Bereiche Nutzer gewährt haben

Wenn Sie mehrere Berechtigungen (Bereiche) anfordern, gewähren Nutzer Ihrer App möglicherweise nicht Zugriff auf alle. In deiner App muss geprüft werden, welche Bereiche tatsächlich gewährt wurden. Außerdem müssen Situationen, in denen einige Berechtigungen verweigert werden, ordnungsgemäß behandelt werden. In der Regel werden dazu die Funktionen deaktiviert, die auf diesen verweigerten Bereichen basieren.

Es gibt allerdings Ausnahmen. Bei Google Workspace Enterprise-Apps mit domainweiter Übertragung von Befugnissen oder Apps, die als Vertrauenswürdig gekennzeichnet sind, wird der Zustimmungsbildschirm für detaillierte Berechtigungen umgangen. Für diese Apps wird Nutzern der Bildschirm für die Einwilligung in detaillierte Berechtigungen nicht angezeigt. Stattdessen erhält Ihre App entweder alle angeforderten Bereiche oder keine.

Weitere Informationen finden Sie unter Umgang mit detaillierten Berechtigungen.

Wenn Sie prüfen möchten, ob der Nutzer Ihrer Anwendung Zugriff auf einen bestimmten Bereich gewährt hat, sehen Sie sich das Feld scope in der Antwort des Zugriffstokens an. Die Zugriffsbereiche, die durch das Zugriffstoken gewährt werden, ausgedrückt als Liste von durch Leerzeichen getrennten Strings, bei denen die Groß-/Kleinschreibung beachtet wird.

Die folgende Beispielantwort für ein Zugriffstoken zeigt beispielsweise, dass der Nutzer Ihrer Anwendung Zugriff auf die Berechtigungen für schreibgeschützte Drive-Aktivitäten und Kalendertermine gewährt hat:

  {
    "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
    "expires_in": 3920,
    "token_type": "Bearer",
    "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly",
    "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
  }

Google APIs aufrufen

Nachdem Ihre Anwendung ein Zugriffstoken erhalten hat, können Sie damit im Namen eines bestimmten Nutzerkontos Aufrufe an eine Google API senden, sofern die von der 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-Suchparameter oder einen Authorization-HTTP-Header-Bearer-Wert angeben. Wenn möglich, ist der HTTP-Header vorzuziehen, da Abfragestrings in Server-Logs sichtbar sein können. In den meisten Fällen können Sie eine Clientbibliothek verwenden, um Ihre Aufrufe an Google APIs einzurichten (z. B. beim Aufrufen der Drive Files API).

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

HTTP-GET-Beispiele

Ein Aufruf des Endpunkts drive.files (Drive Files API) mit dem HTTP-Header Authorization: Bearer könnte so aussehen: Beachten Sie, dass Sie Ihr eigenes Zugriffstoken angeben müssen:

GET /drive/v2/files HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

Hier ist ein Aufruf derselben API für den authentifizierten Nutzer mit dem Abfragestringparameter access_token:

GET https://www.googleapis.com/drive/v2/files?access_token=access_token

Beispiele für curl

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

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files

Oder alternativ die Option für den Abfragestringparameter:

curl https://www.googleapis.com/drive/v2/files?access_token=access_token

Zugriffstoken aktualisieren

Zugriffstokens laufen regelmäßig ab und werden zu ungültigen Anmeldedaten für eine zugehörige API-Anfrage. Sie können ein Zugriffstoken aktualisieren, ohne den Nutzer um Erlaubnis zu bitten (auch wenn der Nutzer nicht anwesend ist), wenn Sie Offlinezugriff auf die mit dem Token verknüpften Bereiche angefordert haben.

Wenn Sie ein Zugriffstoken aktualisieren möchten, sendet Ihre Anwendung eine HTTPS-POST-Anfrage an den Autorisierungsserver von Google (https://oauth2.googleapis.com/token). Diese Anfrage enthält die folgenden Parameter im Anfragetext:

Name Wert
client_id Die Client-ID, die Sie über die API Console erhalten haben.
client_secret Optional

Der Clientschlüssel, der über die API Console abgerufen wurde. (Der client_secret ist nicht zutreffend 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 gesetzt werden.
refresh_token Das Aktualisierungstoken, das beim Austausch des Autorisierungscodes zurückgegeben wurde.

Die Verwendung von DPoP ist optional, wird aber für mehr Sicherheit empfohlen. Wenn Sie DPoP mit einem Aktualisierungstoken verwenden möchten, muss Ihre Anwendung für jede Anfrage an den Token-Endpunkt ein neues, eindeutiges DPoP-Proof-JWT generieren. Dieser Nachweis muss mit demselben privaten Schlüssel signiert werden, der beim ersten Austausch des Autorisierungscodes verwendet wurde. Ihre Anwendung fügt den Nachweis als HTTP-Anfrageheader hinzu.

Header Erforderlich Beschreibung
DPoP Optional Ein DPoP-Proof ist ein JWT, das den Besitz eines privaten Schlüssels belegt. Dies ist ein Header, kein Parameter. Falls angegeben, sind die zurückgegebenen Tokens an diesen Schlüssel gebunden. Für jede Anfrage muss ein neuer, eindeutiger Nachweis generiert werden, der die Claims htm (HTTP-Methode) und htu (HTTP-URI) enthält, die der Anfrage entsprechen.

Das folgende Snippet zeigt eine Beispielanfrage:

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

client_id=your_client_id&
refresh_token=refresh_token&
grant_type=refresh_token

Wenn Sie DPoP mit einem Aktualisierungstoken verwenden möchten, müssen Sie für die Anfrage ein neues, eindeutiges DPoP-Proof-JWT generieren. Eine detaillierte Anleitung zum Generieren des Schlüsselpaars und zum Erstellen des JWT finden Sie unter DPoP-Proof erstellen.

Ein erfolgreicher Austausch wird durch eine 200 OK-Antwort mit einem neuen Zugriffstoken angezeigt. Wenn DPoP verwendet wird, ist der token_type Bearer. Eine erfolgreiche Antwort bestätigt, dass der DPoP-Proof für das Aktualisierungstoken akzeptiert wurde. Google kann in der Antwort auch einen neuen HTTP-Header DPoP-Nonce zurückgeben. Wenn er zurückgegeben wird, muss Ihr Client diese Nonce im Cache speichern und sie in nachfolgenden Anfragen in den nonce-Claim des DPoP-Proofs aufnehmen.

Ein fehlgeschlagener Austausch tritt auf, wenn der DPoP-Header fehlt, ungültig ist oder einen falschen Schlüssel verwendet. Weitere Informationen zu bestimmten DPoP-Fehlercodes und zur Verarbeitung von Nonces finden Sie unter Fehlgeschlagener Austausch.

Das folgende Snippet zeigt ein Beispiel für erfolgreiche Antwortheader und einen Antworttext, wenn DPoP verwendet wird:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI

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

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

Token-Widerruf

In einigen Fällen möchte ein Nutzer möglicherweise den Zugriff einer Anwendung widerrufen. Nutzer können den Zugriff in den Kontoeinstellungen widerrufen. Weitere Informationen finden Sie im Supportdokument Drittanbieter-Websites und ‑Apps mit Zugriff auf Ihr Konto im Abschnitt „Zugriff von Websites oder Apps entfernen“.

Eine Anwendung kann den ihr gewährten Zugriff auch programmatisch widerrufen. Der programmatische Widerruf ist wichtig, wenn ein Nutzer ein Abo kündigt, eine Anwendung entfernt oder sich die von einer App benötigten API-Ressourcen erheblich geändert haben. Das bedeutet, dass ein Teil des Entfernungsprozesses eine API-Anfrage sein kann, um sicherzustellen, 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 das Aktualisierungstoken ebenfalls widerrufen.

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

Methoden zur Weiterleitung in die App

Benutzerdefiniertes URI-Schema

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

Alternative zur Verwendung benutzerdefinierter URI-Schemas in Chrome-Apps

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

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

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

Wenn Ihre App die Autorisierungsantwort erhält, sollte sie aus Gründen der Nutzerfreundlichkeit eine HTML-Seite anzeigen, auf der der Nutzer aufgefordert wird, den Browser zu schließen und zu Ihrer App zurückzukehren.

Empfohlene Verwendung Desktop-Apps für macOS, Linux und Windows
Formularwerte Legen Sie den Anwendungstyp auf Desktop-Anwendung fest.

Manuelles Kopieren/Einfügen (eingestellt)

Apps schützen

App-Inhaberschaft für Chrome bestätigen

Sie können die Inhaberschaft Ihrer Anwendung bestätigen, um das Risiko von App-Identitätsdiebstahl zu verringern.

Für die Bestätigung verwenden Sie Ihr Chrome Web Store-Entwicklerkonto. Für eine erfolgreiche Überprüfung müssen die folgenden Anforderungen erfüllt sein:

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

Hinweis: Warten Sie nach dem Gewähren des Zugriffs auf Ihr Konto einige Minuten, bevor Sie die Bestätigung abschließen.

Wenn die Überprüfung erfolgreich ist, wird eine Benachrichtigung angezeigt, die den Erfolg des Überprüfungsprozesses bestätigt. Andernfalls wird eine Fehlermeldung angezeigt.

Wenn die Bestätigung fehlgeschlagen ist, versuchen Sie Folgendes:

App Check (nur iOS)

Die Funktion App Check schützt Ihre iOS-Anwendungen vor unbefugter Nutzung. Dazu wird der App Attest-Dienst von Apple verwendet, um zu prüfen, ob Anfragen an Google OAuth 2.0-Endpunkte von Ihren authentischen Anwendungen stammen. So lässt sich das Risiko von App-Identitätsdiebstahl verringern.

App Check für Ihren iOS-Client aktivieren

Die folgenden Anforderungen müssen erfüllt sein, damit App Check für Ihren iOS-Client aktiviert werden kann:
  • Sie müssen eine Team-ID für Ihren iOS-Client angeben.
  • Sie dürfen in Ihrer Paket-ID keinen Platzhalter verwenden, da dieser zu mehr als einer App aufgelöst werden kann. Das bedeutet, dass die Paket-ID kein Sternchen (*) enthalten darf.
Wenn Sie App Check aktivieren möchten, aktivieren Sie in der Bearbeitungsansicht Ihres iOS-Clients den Schalter OAuth-Client mit Firebase App Check vor Missbrauch schützen.

Nachdem Sie App Check aktiviert haben, werden in der Bearbeitungsansicht des OAuth-Clients Messwerte zu OAuth-Anfragen von Ihrem Client angezeigt. Anfragen von nicht verifizierten Quellen werden erst blockiert, wenn Sie App Check erzwingen. Anhand der Informationen auf der Seite „Messwertmonitoring“ können Sie festlegen, wann Sie mit der Erzwingung beginnen sollten.

Wenn Sie App Check für Ihre iOS-App aktivieren, werden möglicherweise Fehler im Zusammenhang mit der App Check-Funktion angezeigt. Versuchen Sie Folgendes, um diese Fehler zu beheben:

  • Prüfen Sie, ob die von Ihnen angegebene Paket-ID und Team-ID gültig sind.
  • Achten Sie darauf, dass Sie keinen Platzhalter für die Paket-ID verwenden.

App Check für Ihren iOS-Client erzwingen

Wenn Sie App Check für Ihre App aktivieren, werden nicht erkannte Anfragen nicht automatisch blockiert. Wenn Sie diesen Schutz erzwingen möchten, rufen Sie die Bearbeitungsansicht Ihres iOS-Clients auf. Dort sehen Sie rechts auf der Seite im Abschnitt Google Identity for iOS App Check-Messwerte. Die Messwerte enthalten die folgenden Informationen:
  • Anzahl der bestätigten Anfragen: Anfragen mit einem gültigen App Check-Token. Nachdem Sie die App Check-Erzwingung aktiviert haben, sind nur Anfragen in dieser Kategorie erfolgreich.
  • Anzahl der nicht bestätigten Anfragen: wahrscheinlich veraltete Clientanfragen – Anfragen ohne App Check-Token. Diese Anfragen stammen möglicherweise von einer älteren Version Ihrer App, die keine App Check-Implementierung enthält.
  • Anzahl der nicht bestätigten Anfragen: Anfragen unbekannten Ursprungs – Anfragen ohne App Check-Token, die nicht von Ihrer App zu stammen scheinen.
  • Anzahl der nicht bestätigten Anfragen: ungültige Anfragen – Anfragen mit einem ungültigen App Check-Token, was auf emulierte Umgebungen oder einen nicht authentischen Client zurückzuführen sein kann, der versucht, sich als Ihre App auszugeben.
Anhand dieser Messwerte können Sie nachvollziehen, wie sich die Erzwingung von App Check auf Ihre Nutzer auswirkt.

Klicken Sie auf ENFORCE und bestätigen Sie Ihre Auswahl, um App Check zu erzwingen. Sobald die Erzwingung aktiv ist, werden alle nicht bestätigten Anfragen von Ihrem Client abgelehnt.

Hinweis: Nachdem Sie die Erzwingung aktiviert haben, kann es bis zu 15 Minuten dauern, bis die Änderungen wirksam werden.

App Check für Ihren iOS-Client nicht erzwingen

Wenn Sie App Check für Ihre App nicht erzwingen, wird die Erzwingung beendet und alle Anfragen von Ihrem Client an Google OAuth 2.0-Endpunkte werden zugelassen, einschließlich nicht bestätigter Anfragen.

Wenn Sie App Check für Ihren iOS-Client nicht mehr erzwingen möchten, rufen Sie die Bearbeitungsansicht des iOS-Clients auf, klicken Sie auf NICHT ERZWINGEN und bestätigen Sie Ihre Auswahl.

Hinweis: Nach dem Deaktivieren von App Check kann es bis zu 15 Minuten dauern, bis die Änderungen wirksam werden.

App Check für Ihren iOS-Client deaktivieren

Wenn Sie App Check für Ihre App deaktivieren, werden alle App Check-Monitoring- und Erzwingungsmaßnahmen beendet. Sie können die Erzwingung von App Check aufheben, um weiterhin Messwerte für Ihren Client zu beobachten.

Wenn Sie App Check für Ihren iOS-Client deaktivieren möchten, rufen Sie die Bearbeitungsansicht des iOS-Clients auf und deaktivieren Sie den Schalter OAuth-Client mit Firebase App Check vor Missbrauch schützen.

Hinweis: Nach dem Deaktivieren von App Check kann es bis zu 15 Minuten dauern, bis die Änderungen wirksam werden.

Zeitbasierter Zugriff

Mit dem zeitbasierten Zugriff kann ein Nutzer Ihrer App für eine begrenzte Dauer Zugriff auf seine Daten gewähren, um eine Aktion auszuführen. In ausgewählten Google-Produkten ist während des Einwilligungsverfahrens ein zeitbasierter Zugriff verfügbar. Nutzer können damit den Zugriff für einen begrenzten Zeitraum gewähren. Ein Beispiel ist die Data Portability API, die eine einmalige Übertragung von Daten ermöglicht.

Wenn ein Nutzer Ihrer Anwendung zeitbasierten Zugriff gewährt, läuft das Aktualisierungstoken nach der angegebenen Dauer ab. Beachten Sie, dass Aktualisierungstokens unter bestimmten Umständen früher ungültig werden können. Weitere Informationen finden Sie in diesen Fällen. Das Feld refresh_token_expires_in, das in der Antwort auf den Austausch des Autorisierungscodes zurückgegeben wird, stellt in solchen Fällen die verbleibende Zeit bis zum Ablauf des Aktualisierungstokens dar.

Weiterführende Literatur

In der IETF Best Current Practice OAuth 2.0 for Native Apps werden viele der hier dokumentierten Best Practices beschrieben.

Produktübergreifenden Kontoschutz implementieren

Ein weiterer Schritt, den Sie zum Schutz der Konten Ihrer Nutzer unternehmen sollten, ist die Implementierung des produktübergreifenden Kontoschutzes mithilfe des entsprechenden Google-Dienstes. Mit diesem Dienst können Sie Benachrichtigungen zu Sicherheitsereignissen abonnieren, die Ihre Anwendung über wichtige Änderungen am Nutzerkonto informieren. Anschließend können Sie die Informationen verwenden, um Maßnahmen zu ergreifen, je nachdem, wie Sie auf Ereignisse reagieren möchten.

Hier einige Beispiele für Ereignistypen, die vom produktübergreifenden Kontoschutz von Google an Ihre App gesendet werden:

  • https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
  • https://schemas.openid.net/secevent/oauth/event-type/token-revoked
  • https://schemas.openid.net/secevent/risc/event-type/account-disabled

Weitere Informationen zur Implementierung des produktübergreifenden Kontoschutzes und eine vollständige Liste der verfügbaren Ereignisse finden Sie auf der Seite Nutzerkonten mit produktübergreifendem Kontoschutz schützen .