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 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.
 - You must include at least one of the following items in the OAuth linking
    page to indicate the integration to which the user is linking:
    
- Company logo
 - Company name
 - Integration name
 - App icon
 
 
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 cancel. Provide a way for users to go back or cancel, if they choose not to link.
Clear sign-in process. Ensure that users have a clear method for signing in to their Google Account, such as fields for their username and password or Sign in with Google.
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 Autorisierungscode-Vorgangs besteht aus zwei Endpunkten, die Ihr Dienst über HTTPS zur Verfügung stellt. Der erste Endpunkt ist der Autorisierungsendpunkt, der dafür zuständig ist, die Einwilligung von Nutzern für den Datenzugriff zu finden oder einzuholen. Der Autorisierungsendpunkt präsentiert Ihren Nutzern, die noch nicht angemeldet sind, eine Anmelde-UI und zeichnet die Einwilligung in den angeforderten Zugriff auf. Der zweite Endpunkt ist der Token-Austausch-Endpunkt, der verwendet wird, um verschlüsselte Strings (Tokens) zu erhalten, die einen Nutzer zum Zugriff auf Ihren Dienst autorisieren.
Wenn eine Google-Anwendung eine der APIs Ihres Dienstes aufrufen muss, verwendet Google diese Endpunkte, um die Erlaubnis Ihrer Nutzer einzuholen, diese APIs in ihrem Namen aufzurufen.
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, sofern er noch nicht angemeldet ist, und erteilt Google die Berechtigung, mit Ihrer API auf seine Daten zuzugreifen, sofern er die Berechtigung noch nicht erteilt 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 weiter.
 - Google sendet den Autorisierungscode an Ihren Token-Austausch-Endpunkt, der die Authentizität des Codes prüft und ein Zugriffstoken und ein Aktualisierungstoken zurückgibt. Das Zugriffstoken ist ein kurzlebiges Token, das Ihr Dienst als Anmeldedaten für den Zugriff auf APIs akzeptiert. Das Aktualisierungstoken ist ein Token mit langer Gültigkeitsdauer, das Google speichern und verwenden kann, um neue Zugriffstokens abzurufen, wenn diese ablaufen.
 - Nachdem der Nutzer den Vorgang für die Kontoverknüpfung abgeschlossen hat, enthält jede nachfolgende Anfrage von Google ein Zugriffstoken.
 
Autorisierungsanfragen verarbeiten
Wenn Sie die Kontoverknüpfung mit dem OAuth 2.0-Autorisierungscode-Flow durchführen müssen, leitet Google den Nutzer mit einer Anfrage, die die folgenden Parameter enthält, an Ihren Autorisierungsendpunkt weiter:
| Parameter des Autorisierungsendpunkts | |
|---|---|
client_id | 
    Die Client-ID, die Sie Google zugewiesen haben. | 
redirect_uri | 
    Die URL, an die Sie die Antwort auf diese Anfrage senden. | 
state | 
    Nachverfolgungswert, der unverändert in der Weiterleitungs-URI an Google zurückgegeben wird. | 
scope | 
    Optional:Eine durch Leerzeichen getrennte Gruppe von Bereichs-Strings, die die Daten angibt, für die Google eine Autorisierung anfordert. | 
response_type | 
     Der Typ des Werts, der in der Antwort zurückgegeben werden soll. Im OAuth 2.0-Vorgang mit Autorisierungscode ist der Antworttyp immer code.
     | 
  
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
Damit Ihr Autorisierungsendpunkt Anmeldeanfragen verarbeiten kann, führen Sie die folgenden Schritte aus:
- Prüfen Sie, ob 
client_idmit der Client-ID übereinstimmt, die Sie Google zugewiesen haben, und obredirect_urimit 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_typecodeist. - Prüfen Sie, ob der Nutzer in Ihrem Dienst angemeldet ist. Wenn der Nutzer nicht angemeldet ist, schließen Sie den Anmelde- oder Registrierungsvorgang Ihres Dienstes ab.
 - Autorisierungscode für Google generieren, damit Google auf Ihre API zugreifen kann. Der Autorisierungscode kann ein beliebiger Stringwert sein, muss aber den Nutzer, den Client, für den das Token bestimmt ist, und die Ablaufzeit des Codes eindeutig repräsentieren und darf nicht erraten werden können. Normalerweise geben Sie Autorisierungscodes aus, die nach etwa 10 Minuten ablaufen.
 - Prüfen Sie, ob die URL, die durch den Parameter 
redirect_uriangegeben wird, folgendes Format hat:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
 - Leiten Sie den Browser des Nutzers zur URL weiter, die durch den Parameter 
redirect_uriangegeben wird. Fügen Sie den Autorisierungscode, den Sie gerade generiert haben, und den ursprünglichen, unveränderten Statuswert ein, wenn Sie die Weiterleitung vornehmen, indem Sie die Parametercodeundstateanhängen. Das ist ein Beispiel für die resultierende URL:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
 
Tokenaustauschanfragen verarbeiten
Der Token-Austauschendpunkt Ihres Dienstes ist für zwei Arten von Token-Austauschvorgängen zuständig:
- Autorisierungscodes gegen Zugriffstokens und Aktualisierungstokens eintauschen
 - Aktualisierungstokens gegen Zugriffstokens tauschen
 
Tokenaustauschanfragen enthalten die folgenden Parameter:
| Parameter für den Token-Exchange-Endpunkt | |
|---|---|
client_id | 
    Ein 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 Tokens, der ausgetauscht wird. Es ist entweder authorization_code oder refresh_token. | 
  
code | 
    Wenn grant_type=authorization_code, ist dieser Parameter der Code, den Google von Ihrem Anmelde- oder Tokenaustausch-Endpunkt erhalten hat. | 
  
redirect_uri | 
    Wenn grant_type=authorization_code, ist dieser Parameter die URL, die in der ursprünglichen Autorisierungsanfrage verwendet wird. | 
  
refresh_token | 
    Wenn grant_type=refresh_token, ist dieser Parameter das Aktualisierungstoken, das Google von Ihrem Token-Austausch-Endpunkt erhalten hat. | 
  
Konfigurieren, wie Google Anmeldedaten an Ihren Server sendet
Je nach Implementierung erwartet Ihr Autorisierungsserver, dass er Clientanmeldedaten entweder im Anfragetext oder im Anfrageheader empfängt.
Standardmäßig sendet Google die Anmeldedaten im Anfragetext. Wenn Ihr Autorisierungsserver erfordert, dass sich die Clientanmeldedaten im Anfrageheader befinden, müssen Sie Ihre Cloud-to-cloud-Integration entsprechend konfigurieren:
Klicken Sie in der Projektliste neben dem Projekt, das Sie bearbeiten möchten, auf Öffnen.
Wählen Sie unter Cloud-to-Cloud die Option Entwickeln aus.
Klicken Sie neben Ihrer 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 Zugriffstokens und Aktualisierungstokens eintauschen
Nachdem sich der Nutzer angemeldet hat und Ihr Autorisierungs-Endpunkt einen kurzlebigen Autorisierungscode an Google zurückgegeben hat, sendet Google eine Anfrage an Ihren Token-Austausch-Endpunkt, 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 der Wert des Autorisierungscodes, den Sie Google zuvor gewährt haben. Im Folgenden sehen Sie ein Beispiel für eine Anfrage zum Tauschen eines Autorisierungscodes gegen ein Zugriffstoken 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
Wenn Sie Autorisierungscodes gegen ein Zugriffstoken und ein Aktualisierungstoken eintauschen möchten, antwortet Ihr Endpunkt für den Tokenaustausch auf POST-Anfragen, indem er die folgenden Schritte ausführt:
- Prüfen Sie, ob 
client_idden Ursprung der Anfrage als autorisierten Ursprung identifiziert und obclient_secretmit dem erwarteten Wert übereinstimmt. - Prüfen Sie, ob der Autorisierungscode gültig und nicht abgelaufen ist und ob die in der Anfrage angegebene Client-ID mit der Client-ID übereinstimmt, die dem Autorisierungscode zugeordnet ist.
 - Prüfen Sie, ob die im Parameter 
redirect_uriangegebene URL mit dem Wert übereinstimmt, der in der ursprünglichen Autorisierungsanfrage verwendet wurde. - Wenn Sie nicht alle oben genannten Kriterien bestätigen können, geben Sie den HTTP-Fehler 400 Bad Request mit 
{"error": "invalid_grant"}als Text zurück. - Verwenden Sie andernfalls die Nutzer-ID aus dem Autorisierungscode, um ein Aktualisierungstoken und ein Zugriffstoken zu generieren. Diese Tokens können einen beliebigen Stringwert haben, 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. Erfassen Sie für Zugriffstokens auch die Ablaufzeit des Tokens, die in der Regel eine Stunde nach der Ausstellung des Tokens liegt. Aktualisierungstokens laufen nicht ab.
 - Geben Sie das folgende JSON-Objekt im Text 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-Austausch-Endpunkt abzurufen.
Aktualisierungstokens gegen Zugriffstokens tauschen
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 gleich refresh_token und der Wert von refresh_token ist der Wert des Aktualisierungstokens, das Sie Google zuvor gewährt haben. Das folgende Beispiel zeigt 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 Sie ein Aktualisierungstoken gegen ein Zugriffstoken eintauschen möchten, führt Ihr Token-Austausch-Endpunkt die folgenden Schritte aus, wenn er auf POST-Anfragen reagiert:
- Prüfen Sie, ob 
client_idGoogle als Ursprung der Anfrage identifiziert und obclient_secretmit 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 dem Aktualisierungstoken zugeordnet ist.
 - Wenn Sie nicht alle oben genannten Kriterien bestätigen 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 String-Werte 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 Ausstellung des Tokens.
 - Geben Sie das folgende JSON-Objekt im Text 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-AuthenticateResponse 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 subA unique ID that identifies the user in your system. emailEmail address of the user. given_nameOptional: First name of the user. family_nameOptional: Last name of the user. nameOptional: Full name of the user. pictureOptional: Profile picture of the user.