Warnung:Diese Daten werden gemäß der Richtlinie zu Google-Nutzerdaten bereitgestellt. Bitte lesen Sie sich die Richtlinien durch und halten Sie sie ein. Andernfalls kann das zu einem Projekt oder einem Konto führen.

Anmeldung auf Fernsehern und begrenzten Eingabegeräten

Sie können Nutzern erlauben, sich mit ihren Google-Konten auf Geräten mit eingeschränkten Eingabefunktionen, z. B. internetfähigen Fernsehern, mit Ihrer App anzumelden.

Für die Anwendung werden ein kurzer Code und eine Anmelde-URL für den Nutzer angezeigt. Dann öffnet der Nutzer die Anmelde-URL in einem Webbrowser, gibt den Code ein und gibt der App Zugriff auf die Anmeldedaten des Nutzers. Abschließend erhält die Anwendung eine Bestätigung und der Nutzer ist angemeldet.

Um diesen Anmeldevorgang verwenden zu können, muss die App auf einem Gerät ausgeführt werden, das die folgenden Kriterien erfüllt:

  • Auf dem Gerät müssen eine URL mit 40 Zeichen, ein Nutzercode mit 15 Zeichen und eine Anleitung für den Nutzer angezeigt werden können.
  • Das Gerät muss mit dem Internet verbunden sein.

Client-ID und Clientschlüssel abrufen

Deine Anwendung benötigt eine OAuth 2.0-Client-ID und einen Clientschlüssel, um Anfragen an die Google-Anmeldeendpunkte zu senden.

So findest du die Client-ID und den Clientschlüssel deines Projekts:

  1. Wählen Sie vorhandene OAuth 2.0-Anmeldedaten aus oder öffnen Sie die Seite Anmeldedaten.
  2. Wenn du dies noch nicht getan hast, erstelle die OAuth 2.0-Anmeldedaten für dein Projekt. Klicke dazu auf Anmeldedaten erstellen und erstellen und gib die Informationen ein, die zum Erstellen der Anmeldedaten erforderlich sind.
  3. Suchen Sie im Bereich OAuth 2.0-Client-IDs nach der Client-ID. Klicken Sie für weitere Informationen auf die Client-ID.

Wenn Sie eine neue Client-ID erstellen, wählen Sie den Anwendungstyp Fernseher und eingeschränkte Eingabegeräte aus.

Nutzercode und Bestätigungscode-URL abrufen

Wenn ein Nutzer die Anmeldung mit einem Google-Konto anfordert, erhalten Sie einen Nutzercode und eine Bestätigungs-URL. Dazu senden Sie eine HTTP-POST-Anfrage an den OAuth 2.0-Geräteendpunkt https://oauth2.googleapis.com/device/code. Geben Sie Ihre Client-ID und eine Liste der von der Anfrage benötigten Bereiche an. Wenn Sie nur Nutzer mit ihren Google-Konten anmelden möchten, fordern Sie nur die Bereiche profile und email an. Wenn Sie die Berechtigung zum Aufrufen einer unterstützten API im Namen von Nutzern anfordern möchten, fordern Sie die erforderlichen Bereiche zusätzlich zu den Bereichen profile und email an.

Hier sehen Sie eine Beispielanfrage für einen Nutzercode:

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

client_id=CLIENT_ID&scope=email%20profile

mit curl:

curl -d "client_id=CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code

Die Antwort wird als JSON-Objekt zurückgegeben:

{
  "device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code" : "GQVQ-JKEC",
  "verification_url" : "https://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}

In deiner App werden die Werte user_code und verification_url für den Nutzer angezeigt. Gleichzeitig wird der Anmeldeendpunkt unter dem angegebenen interval abgefragt, bis entweder der Nutzer sich anmeldet oder der durch expires_in angegebene Zeitraum abgelaufen ist.

Nutzercode und Verifizierungs-URL anzeigen

Wenn Sie einen Nutzercode und eine Verifizierungs-URL vom Geräteendpunkt erhalten haben, zeigen Sie sie an und weisen Sie den Nutzer an, die URL zu öffnen und den Nutzercode einzugeben.

Die Werte für verification_url und user_code können sich ändern. Halten Sie das Design Ihrer Benutzeroberfläche so an, dass damit folgende Grenzwerte verarbeitet werden können:

  • user_code muss in einem Feld angezeigt werden, das weit genug genug ist, um 15 Zeichen (W) zu verarbeiten.
  • verification_url muss in einem Feld angezeigt werden, das für einen 40 Zeichen langen URL-String groß genug ist.

Beide Strings können beliebige druckbare Zeichen aus dem US-ASCII-Zeichensatz enthalten.

Du solltest den String user_code in keiner Weise ändern, z. B. durch Groß-/Kleinschreibung oder das Einfügen anderer Formatierungszeichen. Das kann dazu führen, dass deine App nicht mehr funktioniert, wenn sich das Format des Codes später ändert.

Du kannst den verification_url-String ändern, indem du das Schema zu Anzeigezwecken aus der URL entfernst. Achten Sie dabei darauf, dass Ihre Anwendung sowohl die HTTP- als auch die HTTP-Varianten verarbeiten kann. Ändern Sie den String verification_url ansonsten nicht.

Wenn der Nutzer die Bestätigungs-URL aufruft, sieht er eine Seite, die in etwa so aussieht:

Gerät durch Eingabe eines Codes verbinden

Nachdem der Nutzer den Nutzercode eingegeben hat, zeigt die Google Log-in-Website einen Zustimmungsbildschirm an, der in etwa so aussieht:

Beispiel für einen Zustimmungsbildschirm für einen Geräteclient

Wenn der Nutzer auf Zulassen klickt, kann Ihre App ein ID-Token zum Identifizieren des Nutzers, ein Zugriffstoken zum Aufrufen von Google APIs und ein Aktualisierungstoken zum Abrufen neuer Tokens abrufen.

ID- und Aktualisierungstoken abrufen

Nachdem deine App den Nutzercode und die Bestätigungs-URL angezeigt hat, frag das Token (https://oauth2.googleapis.com/token) mit dem Gerätecode ab, den du vom Geräteendpunkt erhalten hast. Führt den Tokenendpunkt zum Intervall in Sekunden aus, angegeben durch den Wert interval.

Hier eine Beispielanfrage:

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

client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0

mit curl:

curl -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token

Wenn der Nutzer die Anfrage noch nicht genehmigt hat, lautet die Antwort:

{
  "error" : "authorization_pending"
}

Ihre Anwendung sollte diese Anfragen mit einer Geschwindigkeit wiederholen, die den Wert von interval nicht überschreitet. Wenn Ihre App zu schnell eine Umfrage ausführt, lautet die Antwort so:

{
  "error" : "slow_down"
}

Nachdem sich der Nutzer angemeldet hat und Ihrer App Zugriff auf die angeforderten Bereiche gewährt, enthält die Antwort auf die nächste Anfrage Ihrer App ein ID-, ein Zugriffstoken und ein Aktualisierungstoken:

{
  "access_token" : "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
  "id_token": "eyJhbGciOiJSUzI..."
}

Nach Erhalt dieser Antwort kann deine App das ID-Token decodieren, um grundlegende Profilinformationen zum angemeldeten Nutzer zu erhalten. Oder du kannst das ID-Token an deinen Back-End-Server deiner App senden, um sich bei dem Server sicher zu authentifizieren. Außerdem kann Ihre Anwendung das Zugriffstoken verwenden, um die vom Nutzer autorisierten Google APIs aufzurufen.

ID- und Zugriffstokens haben eine begrenzte Lebensdauer. Damit der Nutzer länger als die Tokens angemeldet bleibt, speichern Sie das Aktualisierungstoken und verwenden es, um neue Tokens anzufordern.

Nutzerprofilinformationen aus dem ID-Token abrufen

Sie können Profilinformationen über den angemeldeten Nutzer abrufen, indem Sie das ID-Token mit einer beliebigen JWT-Decodierungsbibliothek decodieren. Beispiel: Mit der Auth0-jwt-decodeJavaScript-Bibliothek:

var user_profile = jwt_decode(id_token);

// The "sub" field is available on all ID tokens. This value is unique for each
// Google account and can be used to identify the user. (But do not send this
// value to your server; instead, send the whole ID token so its authenticity
// can be verified.)
var user_id = user_profile["sub"];

// These values are available when you request the "profile" and "email" scopes.
var user_email = user_profile["email"];
var email_verified = user_profile["email_verified"];
var user_name = user_profile["name"];
var user_photo_url = user_profile["picture"];
var user_given_name = user_profile["given_name"];
var user_family_name = user_profile["family_name"];
var user_locale = user_profile["locale"];

Weitere Informationen