Jede Cloud-to-cloud-Integration muss einen Mechanismus zur Authentifizierung von Nutzern enthalten.
Über die Authentifizierung kannst du die Google-Konten deiner Nutzer mit Nutzerkonten in deinem Authentifizierungssystem verknüpfen. So kannst du Nutzer identifizieren, wenn deine Auftragsausführung einen Smart-Home-Intent empfängt. Google Smart Home unterstützt nur OAuth mit einem Autorisierungscode-Ablauf.
Auf dieser Seite wird beschrieben, wie Sie Ihren OAuth 2.0-Server so einrichten, dass er mit Ihrer Cloud-to-cloud-Integration funktioniert.
Google-Kontoverknüpfung mit OAuth
In the authorization code flow, you need two endpoints:
The authorization endpoint, which presents the sign-in UI to your users that aren't already signed in. The authorization endpoint also creates a short-lived authorization code to record users' consent to the requested access.
The token exchange endpoint, which is responsible for two types of exchanges:
- Exchanges an authorization code for a long-lived refresh token and a short-lived access token. This exchange happens when the user goes through the account linking flow.
- Exchanges a long-lived refresh token for a short-lived access token. This exchange happens when Google needs a new access token because the one it had expired.
Design guidelines
This section describes the design requirements and recommendations for the user screen that you host for OAuth linking flows. After it's called by Google's app, your platform displays a sign in to Google page and account linking consent screen to the user. The user is directed back to Google's app after giving their consent to link accounts.

Requirements
- You must communicate that the user’s account will be linked to Google, not a specific Google product like Google Home or Google Assistant.
- You must have a Google authorization statement such as "By signing in, you are authorizing Google to control your devices." See the Google Device Control Authorization section of the Google Home Developer Policies.
- You must provide a way for users to go back or cancel, if they choose not to link.
- You must open the Web OAuth linking page and ensure users have a clear method for signing in to their Google Account, such as fields for their username and password. Don't use the Google Sign-In (GSI) method that enables users to link without being taken to the Web OAuth Linking page. It is a violation of Google policy.
Recommendations
We recommend that you do the following:
Display Google's Privacy Policy. Include a link to Google’s Privacy Policy on the consent screen.
Data to be shared. Use clear and concise language to tell the user what data of theirs Google requires and why.
Clear call-to-action. State a clear call-to-action on your consent screen, such as “Agree and link.” This is because users need to understand what data they're required to share with Google to link their accounts.
Ability to unlink. Offer a mechanism for users to unlink, such as a URL to their account settings on your platform. Alternatively, you can include a link to Google Account where users can manage their linked account.
Ability to change user account. Suggest a method for users to switch their account(s). This is especially beneficial if users tend to have multiple accounts.
- If a user must close the consent screen to switch accounts, send a recoverable error to Google so the user can sign in to the desired account with OAuth linking.
Include your logo. Display your company logo on the consent screen. Use your style guidelines to place your logo. If you wish to also display Google's logo, see Logos and trademarks.

Autorisierungscode-Ablauf
Eine OAuth 2.0-Serverimplementierung des Vorgangs mit Autorisierungscode besteht aus zwei Endpunkten, die Ihr Dienst per HTTPS verfügbar macht. Der erste Endpunkt ist der Autorisierungsendpunkt, der für die Suche nach oder den Erhalt der Einwilligung der Nutzer für den Datenzugriff verantwortlich ist. Der Autorisierungsendpunkt zeigt Nutzern, die noch nicht angemeldet sind, eine Anmeldeoberfläche an und erfasst die Einwilligung in den angeforderten Zugriff. Der zweite Endpunkt ist der Token-Austauschendpunkt, mit dem verschlüsselte Strings (Tokens) abgerufen werden, die einen Nutzer zum Zugriff auf Ihren Dienst autorisieren.
Wenn eine Google-Anwendung eine der APIs Ihres Dienstes aufrufen muss, verwendet Google diese Endpunkte zusammen, um von Ihren Nutzern die Berechtigung zum Aufrufen dieser APIs in ihrem Namen einzuholen.
Eine von Google initiierte OAuth 2.0-Sitzung mit Autorisierungscode läuft so ab:
- Google öffnet Ihren Autorisierungsendpunkt im Browser des Nutzers. Wenn der Ablauf für eine Aktion auf einem Gerät ohne Display gestartet wurde, überträgt Google die Ausführung auf ein Smartphone.
- Der Nutzer meldet sich an, falls er noch nicht angemeldet ist, und gewährt Google die Berechtigung, mit Ihrer API auf seine Daten zuzugreifen, sofern er dies noch nicht getan hat.
- Ihr Dienst erstellt einen Autorisierungscode und gibt ihn an Google zurück. Leiten Sie dazu den Browser des Nutzers mit dem Autorisierungscode, der an die Anfrage angehängt ist, zurück zu Google.
- Google sendet den Autorisierungscode an deinen Token-Austausch-Endpunkt, der die Authentizität des Codes überprüft und ein Zugriffstoken und ein Aktualisierungstoken zurückgibt. Das Zugriffstoken ist ein kurzlebiges Token, das von Ihrem Dienst als Anmeldedaten für den Zugriff auf APIs akzeptiert wird. Das Aktualisierungstoken ist ein langlebiges Token, das Google speichern und verwenden kann, um neue Zugriffstokens abzurufen, wenn die alten ablaufen.
- Nachdem der Nutzer die Kontoverknüpfung abgeschlossen hat, enthält jede nachfolgende Anfrage, die von Google gesendet wird, ein Zugriffstoken.
Autorisierungsanfragen verarbeiten
Wenn du die Kontoverknüpfung mit dem OAuth 2.0-Autorisierungscode-Vorgang durchführen möchtest, sendet Google den Nutzer mit einer Anfrage an deinen Autorisierungsendpunkt. Diese Anfrage enthält die folgenden Parameter:
Parameter für Autorisierungsendpunkte | |
---|---|
client_id |
Die Client-ID, die Sie Google zugewiesen haben. |
redirect_uri |
Die URL, an die Sie die Antwort auf diese Anfrage senden. |
state |
Ein Verwaltungswert, der unverändert über die Weiterleitungs-URI an Google zurückgegeben wird. |
scope |
Optional:Eine durch Leerzeichen getrennte Reihe von Gültigkeitsbereichsstrings, die die Daten angeben, für die Google eine Autorisierung anfordert. |
response_type |
Der Werttyp, der in der Antwort zurückgegeben werden soll. Beim OAuth 2.0-Vorgang mit Autorisierungscode ist der Antworttyp immer code .
|
user_locale |
Die Spracheinstellung des Google-Kontos im Format RFC5646, mit der Ihre Inhalte in der bevorzugten Sprache des Nutzers lokalisiert werden. |
Wenn Ihr Autorisierungsendpunkt beispielsweise unter https://myservice.example.com/auth
verfügbar ist, könnte eine Anfrage so aussehen:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE
Damit Ihr Autorisierungsendpunkt Anmeldeanfragen verarbeiten kann, gehen Sie so vor:
- Prüfen Sie, ob
client_id
mit der Client-ID übereinstimmt, die Sie Google zugewiesen haben, und obredirect_uri
mit der von Google für Ihren Dienst bereitgestellten Weiterleitungs-URL übereinstimmt. Diese Prüfungen sind wichtig, um zu verhindern, dass unbeabsichtigten oder falsch konfigurierten Client-Apps Zugriff gewährt wird. Wenn Sie mehrere OAuth 2.0-Abläufe unterstützen, prüfen Sie auch, obresponse_type
code
ist. - Prüfen Sie, ob der Nutzer in Ihrem Dienst angemeldet ist. Wenn der Nutzer nicht angemeldet ist, führe den Anmelde- oder Registrierungsvorgang für deinen Dienst durch.
- Generieren Sie einen Autorisierungscode, den Google für den Zugriff auf Ihre API verwenden kann. Der Autorisierungscode kann ein beliebiger Stringwert sein, muss aber den Nutzer, den Client, für den das Token bestimmt ist, und das Ablaufdatum des Codes eindeutig repräsentieren. Außerdem darf er nicht erraten werden können. In der Regel geben Sie Autorisierungscodes aus, die nach etwa 10 Minuten ablaufen.
- Prüfen Sie, ob die vom Parameter
redirect_uri
angegebene URL das folgende Format hat:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Der Browser des Nutzers wird an die URL weitergeleitet, die im Parameter
redirect_uri
angegeben ist. Fügen Sie den gerade generierten Autorisierungscode und den ursprünglichen, unveränderten Statuswert hinzu, wenn Sie weiterleiten. Fügen Sie dazu die Parametercode
undstate
an. Das folgende Beispiel zeigt die resultierende URL:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
Tokentauschanfragen verarbeiten
Der Token-Austauschendpunkt Ihres Dienstes ist für zwei Arten von Token-Austauschen verantwortlich:
- Autorisierungscodes gegen Zugriffs- und Aktualisierungstokens eintauschen
- Aktualisierungstokens gegen Zugriffstokens austauschen
Token-Austauschanfragen enthalten die folgenden Parameter:
Parameter für den Token-Austausch-Endpunkt | |
---|---|
client_id |
String, der Google als Ursprung der Anfrage identifiziert. Dieser String muss in Ihrem System als eindeutige Kennung von Google registriert sein. |
client_secret |
Ein geheimer String, den Sie bei Google für Ihren Dienst registriert haben. |
grant_type |
Der Typ des ausgetauschten Tokens. Es ist entweder authorization_code oder refresh_token . |
code |
Bei grant_type=authorization_code ist dieser Parameter der Code, den Google von Ihrem Anmelde- oder Token-Austauschendpunkt erhalten hat. |
redirect_uri |
Wenn grant_type=authorization_code , ist dieser Parameter die URL, die in der ersten Autorisierungsanfrage verwendet wurde. |
refresh_token |
Bei grant_type=refresh_token ist dieser Parameter das Aktualisierungstoken, das Google von Ihrem Token-Austauschendpunkt erhalten hat. |
Konfigurieren, wie Google Anmeldedaten an Ihren Server sendet
Je nach Implementierung erwartet der Autorisierungsserver, dass Clientanmeldedaten entweder im Anfragetext oder im Anfrageheader empfangen werden.
Standardmäßig sendet Google die Anmeldedaten im Anfragetext. Wenn dein Autorisierungsserver die Clientanmeldedaten im Anfrageheader benötigt, musst du deine Cloud-to-cloud-Integration entsprechend konfigurieren:
Klicken Sie in der Projektliste neben dem Projekt, mit dem Sie arbeiten möchten, auf Öffnen.
Wählen Sie unter Cloud-zu-Cloud die Option Entwickeln aus.
Klicken Sie neben der Integration auf Öffnen.
Scrollen Sie nach unten zum Abschnitt Berechtigungen (optional) und klicken Sie das Kästchen Zulassen, dass Google die Client-ID und den Clientschlüssel über den Header für die HTTP-Basic-Authentifizierung überträgt an.
Klicken Sie auf Save (Speichern), um Ihre Änderungen zu übernehmen.
Autorisierungscodes gegen Zugriffs- und Aktualisierungstokens eintauschen
Nachdem sich der Nutzer angemeldet hat und Ihr Autorisierungsendpunkt einen kurzlebigen Autorisierungscode an Google zurückgibt, sendet Google eine Anfrage an Ihren Token-Austauschendpunkt, um den Autorisierungscode gegen ein Zugriffstoken und ein Aktualisierungstoken einzutauschen.
Bei diesen Anfragen ist der Wert von grant_type
authorization_code
und der Wert von code
ist der Autorisierungscode, den Sie Google zuvor erteilt haben. Im Folgenden findest du ein Beispiel für eine Anfrage zum Eintauschen eines Autorisierungscodes gegen ein Zugriffs- und ein Aktualisierungstoken:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
Um Autorisierungscodes gegen ein Zugriffs- und ein Aktualisierungstoken einzutauschen, antwortet der Endpunkt für den Tokenaustausch auf POST
-Anfragen, indem er die folgenden Schritte ausführt:
- Prüfen Sie, ob
client_id
den Ursprung der Anfrage als autorisierten Ursprung identifiziert und obclient_secret
mit dem erwarteten Wert übereinstimmt. - Prüfe, ob der Autorisierungscode gültig und nicht abgelaufen ist und ob die in der Anfrage angegebene Client-ID mit der Client-ID übereinstimmt, die mit dem Autorisierungscode verknüpft ist.
- Prüfe, ob die URL, die über den Parameter
redirect_uri
angegeben ist, mit dem Wert übereinstimmt, der in der ursprünglichen Autorisierungsanfrage verwendet wurde. - Wenn Sie nicht alle oben genannten Kriterien überprüfen können, geben Sie den HTTP-Fehler 400 „Ungültige Anfrage“ mit
{"error": "invalid_grant"}
als Text zurück. - Andernfalls verwende die Nutzer-ID aus dem Autorisierungscode, um ein Aktualisierungs- und ein Zugriffstoken zu generieren. Diese Tokens können beliebige Stringwerte sein, müssen aber den Nutzer und den Client, für den das Token bestimmt ist, eindeutig repräsentieren und dürfen nicht erraten werden können. Notieren Sie für Zugriffstokens auch die Ablaufzeit des Tokens. Diese liegt in der Regel eine Stunde nach der Tokenausgabe. Aktualisierungstokens laufen nicht ab.
- Gib das folgende JSON-Objekt im Textkörper der HTTPS-Antwort zurück:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Google speichert das Zugriffstoken und das Aktualisierungstoken für den Nutzer und zeichnet den Ablauf des Zugriffstokens auf. Wenn das Zugriffstoken abläuft, verwendet Google das Aktualisierungstoken, um ein neues Zugriffstoken von Ihrem Token-Austauschendpunkt abzurufen.
Aktualisierungstokens gegen Zugriffstokens austauschen
Wenn ein Zugriffstoken abläuft, sendet Google eine Anfrage an Ihren Token-Austauschendpunkt, um ein Aktualisierungstoken gegen ein neues Zugriffstoken einzutauschen.
Bei diesen Anfragen ist der Wert von grant_type
refresh_token
und der Wert von refresh_token
ist der Wert des Aktualisierungstokens, das Sie Google zuvor gewährt haben. Im Folgenden findest du ein Beispiel für eine Anfrage zum Austausch eines Aktualisierungstokens gegen ein Zugriffstoken:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
Wenn ein Aktualisierungstoken gegen ein Zugriffstoken eingetauscht werden soll, antwortet der Token-Austausch-Endpunkt auf POST
-Anfragen und führt dabei die folgenden Schritte aus:
- Prüfen Sie, ob
client_id
den Ursprung der Anfrage als Google identifiziert und obclient_secret
mit dem erwarteten Wert übereinstimmt. - Prüfen Sie, ob das Aktualisierungstoken gültig ist und ob die in der Anfrage angegebene Client-ID mit der Client-ID übereinstimmt, die mit dem Aktualisierungstoken verknüpft ist.
- Wenn Sie nicht alle oben genannten Kriterien überprüfen können, geben Sie den HTTP-Fehler 400 „Ungültige Anfrage“ mit
{"error": "invalid_grant"}
als Text zurück. - Andernfalls verwenden Sie die Nutzer-ID aus dem Aktualisierungstoken, um ein Zugriffstoken zu generieren. Diese Tokens können beliebige Stringwerte sein, müssen aber den Nutzer und den Client, für den das Token bestimmt ist, eindeutig repräsentieren und dürfen nicht erraten werden können. Notieren Sie für Zugriffstokens auch die Ablaufzeit des Tokens, in der Regel eine Stunde nach der Tokenausgabe.
- Gib das folgende JSON-Objekt im Textkörper der HTTPS-Antwort zurück:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Handle userinfo requests
The userinfo endpoint is an OAuth 2.0 protected resource that return claims about the linked user. Implementing and hosting the userinfo endpoint is optional, except for the following use cases:
- Linked Account Sign-In with Google One Tap.
- Frictionless subscription on AndroidTV.
After the access token has been successfully retrieved from your token endpoint, Google sends a request to your userinfo endpoint to retrieve basic profile information about the linked user.
userinfo endpoint request headers | |
---|---|
Authorization header |
The access token of type Bearer. |
For example, if your userinfo endpoint is available at
https://myservice.example.com/userinfo
, a request might look like the following:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
For your userinfo endpoint to handle requests, do the following steps:
- Extract access token from the Authorization header and return information for the user associated with the access token.
- If the access token is invalid, return an HTTP 401 Unauthorized error with using the
WWW-Authenticate
Response Header. Below is an example of a userinfo error response: If a 401 Unauthorized, or any other unsuccessful error response is returned during the linking process, the error will be non-recoverable, the retrieved token will be discarded and the user will have to initiate the linking process again.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
If the access token is valid, return and HTTP 200 response with the following JSON object in the body of the HTTPS response:
If your userinfo endpoint returns an HTTP 200 success response, the retrieved token and claims are registered against the user's Google account.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }
userinfo endpoint response sub
A unique ID that identifies the user in your system. email
Email address of the user. given_name
Optional: First name of the user. family_name
Optional: Last name of the user. name
Optional: Full name of the user. picture
Optional: Profile picture of the user.