Google-Kontoverknüpfung mit OAuth

Konten werden über die Branchenstandard-OAuth 2.0-Vorgänge implizit und Autorisierungscode verknüpft.

 Ihr Dienst muss OAuth 2.0-kompatible Autorisierungs- und Tokenaustausch-Endpunkte unterstützen.

Beim impliziten Ablauf öffnet Google Ihren Autorisierungsendpunkt im Browser des Nutzers. Nach der erfolgreichen Anmeldung geben Sie ein langlebiges Zugriffstoken an Google zurück. Dieses Zugriffstoken ist jetzt in jeder Anfrage enthalten, die von Google gesendet wird.

Für den Ablauf mit Autorisierungscode sind zwei Endpunkte erforderlich:

  • Den Autorisierungsendpunkt, der noch nicht angemeldeten Nutzern die Anmelde-UI anzeigt. Der Autorisierungsendpunkt erstellt auch einen kurzlebigen Autorisierungscode, um die Einwilligung der Nutzer in den angeforderten Zugriff zu erfassen.

  • Der Token-Austausch-Endpunkt, der für zwei Arten von Anzeigenplattformen verantwortlich ist:

    1. Hier wird ein Autorisierungscode gegen ein langlebiges Aktualisierungstoken und ein kurzlebiges Zugriffstoken eingetauscht. Dieser Austausch erfolgt, wenn der Nutzer die Kontoverknüpfung durchläuft.
    2. Ein langlebiges Aktualisierungstoken wird gegen ein kurzlebiges Zugriffstoken eingetauscht. Dieser Austausch erfolgt, wenn Google ein neues Zugriffstoken benötigt, weil das vorherige abgelaufen ist.

OAuth 2.0-Vorgang auswählen

Der implizite Ablauf ist zwar einfacher zu implementieren, Google empfiehlt jedoch, dass die über den impliziten Ablauf ausgestellten Zugriffstokens nie ablaufen. Das liegt daran, dass der Nutzer beim impliziten Ablauf gezwungen wird, sein Konto noch einmal zu verknüpfen, nachdem ein Token abgelaufen ist. Wenn Sie aus Sicherheitsgründen ein Ablaufdatum für Tokens benötigen, empfehlen wir Ihnen dringend, stattdessen den Ablaufvorgang für Autorisierungscodes zu verwenden.

Gestaltungsrichtlinien

In diesem Abschnitt werden die Designanforderungen und -empfehlungen für den Nutzerbildschirm beschrieben, den Sie für OAuth-Verknüpfungsvorgänge hosten. Nachdem die Funktion von der Google-App aufgerufen wurde, wird dem Nutzer auf Ihrer Plattform eine Seite zur Anmeldung bei Google und ein Bildschirm zur Einwilligung in die Kontoverknüpfung angezeigt. Nachdem der Nutzer seine Einwilligung zur Kontoverknüpfung gegeben hat, wird er zur Google-App zurückgeleitet.

Auf dieser Abbildung sind die Schritte zu sehen, die ein Nutzer ausführen muss, um sein Google-Konto mit Ihrem Authentifizierungssystem zu verknüpfen. Der erste Screenshot zeigt eine vom Nutzer initiierte Verknüpfung auf Ihrer Plattform. Das zweite Bild zeigt die Anmeldung des Nutzers bei Google. Auf dem dritten Bild ist die Einwilligung und Bestätigung des Nutzers zur Verknüpfung seines Google-Kontos mit Ihrer App zu sehen. Der letzte Screenshot zeigt ein erfolgreich verknüpftes Nutzerkonto in der Google App.
Abbildung 1. Kontoverknüpfung, Nutzeranmeldung bei Google und Einwilligungsbildschirme

Voraussetzungen

  1. Du musst angeben, dass das Konto des Nutzers mit Google verknüpft wird und nicht mit einem bestimmten Google-Produkt wie Google Home oder Google Assistant.

Empfehlungen

Wir empfehlen Folgendes:

  1. Datenschutzerklärung von Google anzeigen Fügen Sie im Zustimmungsbildschirm einen Link zur Datenschutzerklärung von Google ein.

  2. Zu teilende Daten: Informieren Sie die Nutzer in einer klaren und prägnanten Sprache darüber, welche Daten von ihnen Google benötigt und warum.

  3. Klarer Call-to-Action Geben Sie auf dem Einwilligungsbildschirm einen klaren Call-to-Action an, z. B. „Zustimmen und verknüpfen“. Nutzer müssen wissen, welche Daten sie mit Google teilen müssen, um ihre Konten zu verknüpfen.

  4. Kündigung möglich. Bieten Sie Nutzern die Möglichkeit, zurückzugehen oder abzubrechen, wenn sie die Verknüpfung nicht herstellen möchten.

  5. Klarer Anmeldevorgang. Achten Sie darauf, dass Nutzer eine eindeutige Methode für die Anmeldung in ihrem Google-Konto haben, z. B. Felder für ihren Nutzernamen und das Passwort oder Über Google anmelden.

  6. Möglichkeit, die Verknüpfung aufzuheben Bieten Sie Nutzern die Möglichkeit, die Verknüpfung aufzuheben, z. B. über eine URL zu ihren Kontoeinstellungen auf Ihrer Plattform. Alternativ können Sie einen Link zum Google-Konto einfügen, über den Nutzer ihr verknüpftes Konto verwalten können.

  7. Berechtigung zum Ändern des Nutzerkontos. Schlage Nutzern eine Methode vor, mit der sie ihr Konto bzw. ihre Konten wechseln können. Das ist besonders hilfreich, wenn Nutzer mehrere Konten haben.

    • Wenn ein Nutzer den Einwilligungsbildschirm schließen muss, um das Konto zu wechseln, senden Sie einen wiederherstellbaren Fehler an Google, damit sich der Nutzer mit der OAuth-Verknüpfung und dem impliziten Ablauf im gewünschten Konto anmelden kann.
  8. Fügen Sie Ihr Logo hinzu. Zeigen Sie Ihr Firmenlogo auf dem Einwilligungsbildschirm an. Verwenden Sie die Stilrichtlinien, um Ihr Logo zu platzieren. Wenn Sie auch das Google-Logo anzeigen lassen möchten, lesen Sie den Hilfeartikel Logos und Marken.

Projekt erstellen

So erstellen Sie Ihr Projekt für die Kontoverknüpfung:

  1. Gehen Sie zur Google API Console.
  2. Klicken Sie auf Projekt erstellen.
  3. Geben Sie einen Namen ein oder übernehmen Sie den generierten Vorschlag.
  4. Bestätigen oder bearbeiten Sie die verbleibenden Felder.
  5. Klicken Sie auf Erstellen.

So rufen Sie Ihre Projekt-ID auf:

  1. Gehen Sie zur Google API Console.
  2. Suchen Sie in der Tabelle auf der Landingpage nach Ihrem Projekt. Die Projekt-ID wird in der Spalte ID angezeigt.

Der Prozess zur Verknüpfung von Google-Konten umfasst einen Zustimmungsbildschirm, auf dem Nutzer darüber informiert werden, welche Anwendung Zugriff auf ihre Daten anfordert, welche Art von Daten angefordert werden und welche Nutzungsbedingungen gelten. Sie müssen den OAuth-Zustimmungsbildschirm konfigurieren, bevor Sie eine Google API-Client-ID generieren.

  1. Öffnen Sie in der Google APIs Console die Seite OAuth-Zustimmungsbildschirm.
  2. Wählen Sie bei Aufforderung das Projekt aus, das Sie gerade erstellt haben.
  3. Füllen Sie auf der Seite „OAuth-Zustimmungsbildschirm“ das Formular aus und klicken Sie auf die Schaltfläche „Speichern“.

    Anwendungsname:Der Name der Anwendung, die um Einwilligung bittet. Der Name sollte Ihre Anwendung korrekt widerspiegeln und mit dem Anwendungsnamen übereinstimmen, den Nutzer an anderer Stelle sehen. Der Anwendungsname wird auf dem Zustimmungsbildschirm für die Kontoverknüpfung angezeigt.

    App-Logo:Ein Bild auf dem Zustimmungsbildschirm, das Nutzern hilft, Ihre App zu erkennen. Das Logo wird auf dem Zustimmungsbildschirm für die Kontoverknüpfung und in den Kontoeinstellungen angezeigt.

    Support-E-Mail-Adresse:Für Nutzer, die Sie wegen Fragen zu ihrer Einwilligung kontaktieren möchten.

    Bereiche für Google-APIs:Mit Bereichen kann Ihre Anwendung auf die privaten Google-Daten Ihrer Nutzer zugreifen. Für die Verknüpfung von Google-Konten reicht der Standardbereich („email“, „profile“, „openid“) aus. Sie müssen keine sensiblen Bereiche hinzufügen. Es empfiehlt sich, Bereiche inkrementell anzufordern, wenn der Zugriff erforderlich ist, und nicht im Voraus. Weitere Informationen

    Autorisierte Domains:Um Sie und Ihre Nutzer zu schützen, erlaubt Google die Nutzung autorisierter Domains nur Anwendungen, die sich mit OAuth authentifizieren. Die Links Ihrer Anwendungen müssen auf autorisierten Domains gehostet werden. Weitere Informationen

    Link zur Startseite der Anwendung:Startseite Ihrer Anwendung. Muss auf einer autorisierten Domain gehostet werden.

    Link zur Datenschutzerklärung der Anwendung:Wird auf dem Zustimmungsbildschirm für die Verknüpfung von Google-Konten angezeigt. Muss auf einer autorisierten Domain gehostet werden.

    Link zu den Nutzungsbedingungen der Anwendung (optional): Muss auf einer autorisierten Domain gehostet werden.

    Abbildung 1. Zustimmungsbildschirm für die Google-Kontoverknüpfung für die fiktive App „Tunery“

  4. Prüfen Sie den „Überprüfungsstatus“. Wenn Ihre Anwendung überprüft werden muss, klicken Sie auf die Schaltfläche „Zur Überprüfung einreichen“, um sie zur Überprüfung einzureichen. Weitere Informationen finden Sie unter Voraussetzungen für die OAuth-Überprüfung.

OAuth-Server implementieren

n

Zur Unterstützung des impliziten OAuth 2.0-Ablaufs stellt Ihr Dienst einen Autorisierungsendpunkt per HTTPS zur Verfügung. Dieser Endpunkt ist für die Authentifizierung und die Einholung der Einwilligung von Nutzern für den Datenzugriff verantwortlich. Der Autorisierungsendpunkt präsentiert Nutzern, die noch nicht angemeldet sind, eine Anmeldeoberfläche und erfasst die Einwilligung zum angeforderten Zugriff.

Wenn eine Google-Anwendung eine der autorisierten APIs Ihres Dienstes aufrufen muss, verwendet Google diesen Endpunkt, um die Berechtigung von Ihren Nutzern zu erhalten, diese APIs in ihrem Namen aufzurufen.

Eine typische OAuth 2.0-Sitzung mit implizitem Ablauf, die von Google initiiert wird, läuft so ab:

  1. Google öffnet Ihren Autorisierungsendpunkt im Browser des Nutzers. Der Nutzer meldet sich an, falls er noch nicht angemeldet ist, und erteilt Google die Berechtigung, mit Ihrer API auf seine Daten zuzugreifen, falls er diese Berechtigung noch nicht erteilt hat.
  2. Ihr Dienst erstellt ein Zugriffstoken und gibt es an Google zurück. Leiten Sie dazu den Browser des Nutzers mit dem Zugriffstoken, das an die Anfrage angehängt ist, zu Google zurück.
  3. Google ruft die APIs Ihres Dienstes auf und hängt jeder Anfrage das Zugriffstoken an. Ihr Dienst prüft, ob das Zugriffstoken Google die Autorisierung für den Zugriff auf die API gewährt, und schließt dann den API-Aufruf ab.

Autorisierungsanfragen verarbeiten

Wenn eine Google-Anwendung die Kontoverknüpfung über einen impliziten OAuth 2.0-Ablauf ausführen muss, sendet Google den Nutzer mit einer Anfrage, die die folgenden Parameter enthält, an Ihren Autorisierungsendpunkt:

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 Ein Nachverfolgungswert, der in der Weiterleitungs-URI unverändert an Google zurückgegeben wird.
response_type Der Typ des Werts, der in der Antwort zurückgegeben werden soll. Für den impliziten OAuth 2.0 Ablauf ist der Antworttyp immer token.
user_locale Die Spracheinstellung des Google-Kontos im RFC5646 Format, die verwendet wird, um Ihre Inhalte in der bevorzugten Sprache des Nutzers zu lokalisieren.

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&response_type=token&user_locale=LOCALE

So verarbeitet Ihr Autorisierungsendpunkt Anmeldeanfragen:

  1. Prüfen Sie die Werte von client_id und redirect_uri, um zu verhindern, dass nicht beabsichtigten oder falsch konfigurierten Client-Apps Zugriff gewährt wird:

    • Bestätigen Sie, dass client_id mit der Client-ID übereinstimmt, die Sie Google zugewiesen haben.
    • Bestätigen Sie, dass die URL, die durch den Parameter redirect_uri angegeben wird, folgendes Format hat:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Prüfen Sie, ob der Nutzer in Ihrem Dienst angemeldet ist. Wenn der Nutzer nicht angemeldet ist, führen Sie den Anmelde- oder Registrierungsablauf Ihres Dienstes aus.

  3. Generieren Sie ein Zugriffstoken, mit dem Google auf Ihre API zugreifen kann. Das Zugriffstoken kann ein beliebiger Stringwert sein, muss aber den Nutzer und den Client, für den das Token bestimmt ist, eindeutig darstellen und darf nicht erraten werden können.

  4. Senden Sie eine HTTP-Antwort, die den Browser des Nutzers an die URL weiterleitet, die durch den redirect_uri Parameter angegeben wird. Fügen Sie alle folgenden Parameter in das URL-Fragment ein:

    • access_token: Das Zugriffstoken, das Sie gerade generiert haben
    • token_type: Der String bearer
    • state: Der unveränderte Statuswert aus der ursprünglichen Anfrage

    Dies ist ein Beispiel für die resultierende URL:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

Der OAuth 2.0-Weiterleitungshandler von Google empfängt das Zugriffstoken und bestätigt, dass sich der Wert von state nicht geändert hat. Nachdem Google ein Zugriffstoken für Ihren Dienst erhalten hat, hängt Google das Token an nachfolgende Aufrufe der APIs Ihres Dienstes an.

处理 userinfo 请求

userinfo 端点是受 OAuth 2.0 保护的资源,会返回关联用户的声明。实现和托管 userinfo 端点是可选的,但以下用例除外:

从您的令牌端点成功检索到访问令牌后,Google 会向您的 userinfo 端点发送请求,以检索关联用户的基本个人资料信息。

userinfo 端点请求标头
Authorization header Bearer 类型的访问令牌。

例如,如果您的 userinfo 端点可通过 https://myservice.example.com/userinfo 时,请求可能如下所示:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

为了让 userinfo 端点能够处理请求,请执行以下步骤:

  1. 从 Authorization 标头中提取访问令牌,并返回与访问令牌相关联的用户的信息。
  2. 如果访问令牌无效,则使用 WWW-Authenticate 响应标头返回 HTTP 401 Unauthorized 错误。下面是一个 userinfo 错误响应示例:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    如果在关联过程中返回 401 未经授权错误或任何其他失败的错误响应,该错误将无法恢复,检索到的令牌将被舍弃,并且用户必须重新开始关联流程。
  3. 如果访问令牌有效,则返回 HTTPS 正文中包含以下 JSON 对象的 HTTP 200 响应 回答:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    如果您的 userinfo 端点返回 HTTP 200 成功响应,则系统会针对用户的 Google 账号注册检索到的令牌和声明。

    userinfo 端点响应
    sub 系统中用于识别用户的唯一 ID。
    email 用户的电子邮件地址。
    given_name 可选:用户的名字。
    family_name 可选:用户的姓氏。
    name 可选:用户的全名。
    picture 可选:用户的个人资料照片。

Implementierung validieren

您可以使用 OAuth 2.0 Playground 工具验证您的实现。

在该工具中,执行以下步骤:

  1. 点击配置 以打开“OAuth 2.0 配置”窗口。
  2. OAuth flow(OAuth 流程)字段中,选择 Client-side(客户端)。
  3. OAuth Endpoints 字段中,选择 Custom
  4. 在相应字段中指定您的 OAuth 2.0 端点以及您分配给 Google 的客户端 ID。
  5. 第 1 步部分中,请勿选择任何 Google 范围。请将此字段留空,或输入适用于您服务器的范围(如果您不使用 OAuth 范围,则输入任意字符串)。完成后,点击 Authorize APIs
  6. 第 2 步第 3 步部分中,完成 OAuth 2.0 流程,并验证每个步骤是否按预期运行。

您可以使用 Google 账号关联演示工具验证您的实现。

在该工具中,执行以下步骤:

  1. 点击使用 Google 账号登录按钮。
  2. 选择您要关联的账号。
  3. 输入服务 ID。
  4. (可选)输入您将请求访问的一个或多个范围。
  5. 点击开始演示
  6. 当系统提示时,请确认您可以同意或拒绝关联请求。
  7. 确认您已重定向到相应平台。