Konten werden über die branchenüblichen impliziten und Autorisierungscode-Vorgänge für OAuth 2.0 verknüpft. Ihr Dienst muss OAuth 2.0-konforme Autorisierungs- und Token-Austauschendpunkte 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:
- Hier wird ein Autorisierungscode gegen ein langlebiges Aktualisierungstoken und ein kurzlebiges Zugriffstoken eingetauscht. Dieser Austausch erfolgt, wenn der Nutzer die Kontoverknüpfung durchläuft.
- 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.
Voraussetzungen
- 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:
Datenschutzerklärung von Google anzeigen Fügen Sie im Zustimmungsbildschirm einen Link zur Datenschutzerklärung von Google ein.
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.
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.
Kündigung möglich. Bieten Sie Nutzern die Möglichkeit, zurückzugehen oder abzubrechen, wenn sie die Verknüpfung nicht herstellen möchten.
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.
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.
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.
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.
创建项目
如需创建使用账号关联的项目,请执行以下操作:
- 点击 Create project。
- 输入名称或接受生成的建议。
- 确认或修改所有剩余字段。
- 点击创建。
如需查看项目 ID,请执行以下操作:
- 在着陆页的表格中找到您的项目。项目 ID 会显示在 ID 列中。
配置 OAuth 权限请求页面
Google 账号关联流程包含一个权限请求页面,该页面会告知用户哪个应用在请求访问其数据、请求访问哪些类型的数据,以及适用的条款。您需要先配置 OAuth 权限请求页面,然后才能生成 Google API 客户端 ID。
- 打开 Google API 控制台的 OAuth 同意屏幕页面。
- 如果出现提示,请选择您刚刚创建的项目。
在“OAuth 同意屏幕”页面上,填写表单,然后点击“保存”按钮。
应用名称:征求用户同意的应用的名称。名称应准确反映您的应用,并与用户在其他位置看到的应用名称保持一致。应用名称将显示在账号关联权限请求界面上。
应用徽标:权限请求页面上显示的一张图片,用以让用户认出您的应用。徽标会显示在账号关联权限请求页面和账号设置中
支持电子邮件地址:供用户就其同意问题与您联系。
Google API 的范围:借助范围,您的应用可以访问用户的非公开 Google 数据。对于 Google 账号关联使用情形,默认范围(电子邮件地址、个人资料、openid)就足够了,您无需添加任何敏感范围。一般来说,最佳做法是在需要访问权限时逐步请求权限范围,而不是提前请求。了解详情。
已获授权的网域:为了保护您和您的用户,Google 只允许使用 OAuth 进行身份验证的应用使用已获授权的网域。应用的链接必须托管在已获授权的网域上。了解详情。
应用首页链接:应用的首页。必须托管在已获授权的网域上。
应用隐私权政策链接:显示在 Google 账号关联意见征求界面上。必须托管在已获授权的网域上。
应用服务条款链接(可选):必须托管在已获授权的网域上。
图 1. 虚构应用 Tunery 的 Google 账号关联意见征求界面
查看“验证状态”,如果您的应用需要验证,请点击“提交以供验证”按钮,提交应用以供验证。如需了解详情,请参阅 OAuth 验证要求。
OAuth-Server implementieren
Eine OAuth-2.0-Serverimplementierung des Autorisierungscode-Vorgangs besteht aus zwei Endpunkte, die Ihr Dienst über HTTPS zur Verfügung stellt. Der erste Endpunkt ist der Autorisierungsendpunkt, der für die Suche oder den Erhalt Einwilligung der Nutzer für den Datenzugriff erteilen. Der Autorisierungsendpunkt zeigt eine Anmelde-UI für noch nicht angemeldete Nutzer angezeigt, für die den angeforderten Zugriff gewährt. Der zweite Endpunkt ist der Tokenaustausch-Endpunkt, wird verwendet, um verschlüsselte Strings, sogenannte Tokens, zu erhalten, die einen Nutzer dazu autorisieren, auf Ihren Dienst zugreifen.
Wenn eine Google-Anwendung eine der APIs Ihres Dienstes aufrufen muss, verwendet Google diese Endpunkte miteinander verbinden, um von Ihren Nutzern die Berechtigung zum Aufrufen dieser APIs zu erhalten. im Namen der Person.
Eine von Google initiierte Sitzung mit OAuth 2.0-Autorisierungscode enthält den folgenden Ablauf:
- Google öffnet Ihren Autorisierungsendpunkt im Browser des Nutzers. Wenn der Fluss die für eine Aktion auf einem Nur-Sprach-Gerät gestartet werden, bis hin zu einem Smartphone.
- Der Nutzer meldet sich an, falls er noch nicht angemeldet ist, und erteilt Google die Berechtigung, mit Ihrer API auf ihre Daten zugreifen, falls sie nicht bereits eine Berechtigung erteilt haben.
- Ihr Dienst erstellt einen Autorisierungscode und gibt ihn an Google zurück. Aufgabe Den Browser des Nutzers mit dem Autorisierungscode an Google weiterleiten an die Anfrage angehängt.
- Google sendet den Autorisierungscode an Ihren Endpunkt für den Tokenaustausch, der überprüft die Authentizität des Codes und gibt ein Zugriffstoken sowie ein Aktualisierungstoken. Das Zugriffstoken ist ein kurzlebiges Token, das von Ihrem Dienst als Anmeldedaten für den Zugriff auf APIs akzeptiert. Das Aktualisierungstoken ist ein langlebiges Token, das Google speichern und verwenden kann, um neue Zugriffstokens zu erhalten, wenn sie verfallen lassen.
- Nachdem der Nutzer die Kontoverknüpfung abgeschlossen hat, werden alle nachfolgenden -Anforderung von Google enthält ein Zugriffstoken.
Autorisierungsanfragen verarbeiten
Wenn Sie die Kontoverknüpfung mit dem OAuth 2.0-Autorisierungscode vornehmen müssen sendet Google den Nutzer mit einer Anfrage an Ihren Autorisierungsendpunkt, enthält die folgenden Parameter:
| 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 |
Buchhaltungswert, der unverändert an Google zurückgegeben wird Weiterleitungs-URI. |
scope |
Optional: Ein durch Leerzeichen getrennter Satz von Bereichsstrings, die die Daten, für die Google eine Autorisierung anfordert. |
response_type |
Der Werttyp, der in der Antwort zurückgegeben werden soll. Für OAuth 2.0
Vorgang mit Autorisierungscode ausführen, lautet der Antworttyp immer code.
|
user_locale |
Die Spracheinstellung des Google-Kontos in RFC5646 -Format, mit dem Ihre Inhalte in die bevorzugte Sprache des Nutzers lokalisiert werden. |
Wenn Ihr Autorisierungsendpunkt z. B. unter
https://myservice.example.com/auth, kann 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 der Autorisierungsendpunkt Anmeldeanfragen verarbeiten kann, musst du Folgendes tun: Schritte:
- Prüfen Sie, ob die
client_idmit der Client-ID übereinstimmt, die Sie Google zugewiesen haben, und dass dieredirect_urimit der Weiterleitungs-URL übereinstimmt, die Google für Ihren Dienst bereitgestellt hat. Diese Prüfungen sind wichtig, um zu verhindern, unbeabsichtigte oder falsch konfigurierte Client-Apps verwenden. Wenn Sie mehrere OAuth 2.0-Abläufe. Prüfe außerdem, obresponse_typeaufcodegesetzt ist. - Prüfen Sie, ob der Nutzer in Ihrem Dienst angemeldet ist. Ist der Nutzer nicht angemeldet, den Anmelde- oder Anmeldevorgang Ihres Service abzuschließen.
- Generieren Sie einen Autorisierungscode, mit dem Google auf Ihre API zugreifen kann. Der Autorisierungscode kann ein beliebiger Stringwert sein, muss aber eindeutig sein stellen den Nutzer, den Client, für den das Token gilt, und den Ablauf des Codes dar. Zeit und darf nicht erraten werden. In der Regel erteilen Sie eine Autorisierung Codes, die nach etwa 10 Minuten ablaufen.
- Die durch den Parameter
redirect_uriangegebene URL muss die folgendes Formular: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 an die URL weiter, die im
redirect_uri-Parameter. Geben Sie den Autorisierungscode an, und den ursprünglichen, unveränderten Statuswert beim Weiterleiten indem Sie die Parametercodeundstateanhängen. Im Folgenden finden Sie Beispiel für die resultierende URL:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
Anfragen zum Tokenaustausch verarbeiten
Der Tokenaustausch-Endpunkt Ihres Dienstes ist für zwei Arten von Tokens verantwortlich Plattformen:
- Autorisierungscodes gegen Zugriffstokens und Aktualisierungstokens austauschen
- Aktualisierungstokens gegen Zugriffstokens austauschen
Anfragen für den Tokenaustausch umfassen die folgenden Parameter:
| Parameter für den Tokenaustausch-Endpunkt | |
|---|---|
client_id |
Ein String, der den Ursprung der Anfrage als Google 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 Tokentyp, der ausgetauscht wird. Entweder
authorization_code oder refresh_token. |
code |
Wenn grant_type=authorization_code festgelegt ist, ist dieser Parameter der
Code, den Google von Ihrem Anmelde- oder Tokenaustausch erhalten hat
Endpunkt. |
redirect_uri |
Wenn grant_type=authorization_code festgelegt ist, ist dieser Parameter der
In der ursprünglichen Autorisierungsanfrage verwendete URL. |
refresh_token |
Wenn grant_type=refresh_token festgelegt ist, ist dieser Parameter der
Aktualisierungstoken, das Google von Ihrem Tokenaustausch-Endpunkt erhalten hat. |
Autorisierungscodes gegen Zugriffstokens und Aktualisierungstokens austauschen
Nachdem sich der Nutzer angemeldet hat und Ihr Autorisierungsendpunkt eine kurzlebige Autorisierungscode an Google sendet, sendet Google eine Anfrage an Ihren Tokenaustausch. Endpunkt, um den Autorisierungscode gegen ein Zugriffstoken auszutauschen und eine Aktualisierung durchzuführen Token.
Bei diesen Anfragen ist der Wert von grant_type authorization_code und der Wert
Der Wert von code ist der Wert des Autorisierungscodes, den Sie zuvor gewährt haben
an Google senden. Hier sehen Sie ein Beispiel für eine Anfrage zum Austausch eines
Autorisierungscode für 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
Um Autorisierungscodes gegen ein Zugriffstoken und ein Aktualisierungstoken auszutauschen,
Der Tokenaustauschendpunkt antwortet auf POST-Anfragen mit folgendem Befehl:
Schritte:
- Prüfen Sie, ob
client_idden Ursprung der Anfrage als autorisiert identifiziert Ursprung und derclient_secretmit dem erwarteten Wert übereinstimmt. - Prüfen Sie, ob der Autorisierungscode gültig und nicht abgelaufen ist und dass der Die in der Anfrage angegebene Client-ID stimmt mit der Client-ID überein, die der Autorisierungscode.
- Prüfen, ob die durch den Parameter
redirect_uriangegebene URL identisch ist auf den Wert, der in der ursprünglichen Autorisierungsanfrage verwendet wurde. - Wenn Sie nicht alle oben genannten Kriterien überprüfen können, wird ein HTTP-
Fehler „400 Bad Request“ mit
{"error": "invalid_grant"}als Textkörper - Andernfalls verwenden Sie die Nutzer-ID aus dem Autorisierungscode, um eine Aktualisierung zu generieren Token und ein Zugriffstoken. Diese Tokens können beliebiger Stringwert sein, muss den Nutzer und den Client, für den das Token bestimmt ist, eindeutig repräsentieren. dürfen nicht erraten werden. Notieren Sie sich für Zugriffstokens Das Token. Dies geschieht normalerweise eine Stunde nach der Ausgabe des Tokens. Aktualisierungstokens laufen nicht ab.
- Geben Sie im Text der HTTPS-Antwort das folgende JSON-Objekt 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 die Einträge Ablauf des Zugriffstokens. Wenn das Zugriffstoken abläuft, verwendet Google Das Aktualisierungstoken, um ein neues Zugriffstoken von Ihrem Tokenaustausch-Endpunkt abzurufen.
Aktualisierungstokens gegen Zugriffstokens austauschen
Wenn ein Zugriffstoken abläuft, sendet Google eine Anfrage an Ihren Tokenaustausch um ein Aktualisierungstoken gegen ein neues Zugriffstoken auszutauschen.
Bei diesen Anfragen ist der Wert von grant_type refresh_token und der Wert
von refresh_token ist der Wert des Aktualisierungstokens, das Sie zuvor gewährt haben
Google. Das folgende Beispiel zeigt eine Anfrage zum Austausch eines Aktualisierungstokens:
für 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
Ihr Endpunkt für den Tokenaustausch, um ein Aktualisierungstoken gegen ein Zugriffstoken auszutauschen
antwortet auf POST-Anfragen mit den folgenden Schritten:
- Prüfen Sie, ob
client_idden Ursprung der Anfrage als Google identifiziert. dassclient_secretmit dem erwarteten Wert übereinstimmt. - Prüfen Sie, ob das Aktualisierungstoken gültig ist und ob die Client-ID, die im Die Anfrage stimmt mit der Client-ID überein, die mit dem Aktualisierungstoken verknüpft ist.
- Wenn Sie nicht alle oben genannten Kriterien überprüfen können, geben Sie einen HTTP 400-Fehler zurück
Fehler bei der Anfrage mit
{"error": "invalid_grant"}als Textkörper. - Andernfalls verwenden Sie die Nutzer-ID aus dem Aktualisierungstoken, um einen Zugriff zu generieren. Token. Diese Token können ein beliebiger Stringwert sein, müssen aber eindeutig sein den Nutzer und den Client repräsentieren, für den das Token bestimmt ist, und erraten lassen. Notieren Sie sich bei Zugriffstokens auch die Ablaufzeit des Tokens. normalerweise eine Stunde nach der Ausstellung des Tokens.
- Geben Sie das folgende JSON-Objekt im Text des HTTPS-Objekts zurück:
Antwort:
{ "token_type": "Inhaber", "access_token": "ACCESS_TOKEN", „expires_in“: SECONDS_TO_EXPIRATION }
userinfo-Anfragen verarbeiten
Der userinfo-Endpunkt ist eine geschützte OAuth 2.0-Ressource, die Ansprüche über den verknüpften Nutzer zurückgibt. Die Implementierung und das Hosten des userinfo-Endpunkts sind mit Ausnahme der folgenden Anwendungsfälle optional:
- Anmeldung in einem verknüpften Konto über Google One Tap.
- Reibungsloses Abo auf Android TV
Nachdem das Zugriffstoken erfolgreich von Ihrem Tokenendpunkt abgerufen wurde, sendet Google eine Anfrage an Ihren userinfo-Endpunkt, um grundlegende Profilinformationen über den verknüpften Nutzer abzurufen.
| Anfrageheader für userinfo-Endpunkt | |
|---|---|
Authorization header |
Das Zugriffstoken vom Typ „Bearer“. |
Wenn Ihr userinfo-Endpunkt beispielsweise unter
https://myservice.example.com/userinfo, kann eine Anfrage so aussehen:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
Führen Sie die folgenden Schritte aus, damit der userinfo-Endpunkt Anfragen verarbeiten kann:
- Extrahieren Sie das Zugriffstoken aus dem Autorisierungs-Header und geben Sie Informationen für den Nutzer zurück, der mit dem Zugriffstoken verknüpft ist.
- Wenn das Zugriffstoken ungültig ist, gib den Fehler „HTTP 401 Unauthorized“ mit dem Antwortheader
WWW-Authenticatezurück. Hier ist ein Beispiel für eine Userinfo-Fehlerantwort: Wenn während des Verknüpfungsvorgangs der Fehler „401 Nicht autorisiert“ oder eine andere fehlgeschlagene Fehlermeldung zurückgegeben wird, kann der Fehler nicht behoben werden. Das abgerufene Token wird verworfen und der Nutzer muss den Verknüpfungsvorgang noch einmal starten.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Wenn das Zugriffstoken gültig ist, geben Sie eine HTTP 200-Antwort mit dem folgenden JSON-Objekt im Text des HTTPS-Objekts zurück. Antwort:
Wenn der userinfo-Endpunkt eine HTTP 200-Erfolgsantwort zurückgibt, werden das abgerufene Token und die Anforderungen im Google-Konto des Nutzers registriert.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }Userinfo-Endpunktantwort subEine eindeutige ID, die den Nutzer in Ihrem System identifiziert. emailE-Mail-Adresse des Nutzers given_nameOptional:Vorname des Nutzers. family_nameOptional:Nachname des Nutzers. nameOptional:Vollständiger Name des Nutzers. pictureOptional:Profilbild des Nutzers.
Implementierung validieren
您可以使用 OAuth 2.0 Playground 工具验证您的实现。
在该工具中,执行以下步骤:
- 点击配置 以打开 OAuth 2.0 配置窗口。
- 在 OAuth flow 字段中,选择 Client-side(客户端)。
- 在 OAuth 端点字段中,选择自定义。
- 在相应字段中指定您的 OAuth 2.0 端点和您分配给 Google 的客户端 ID。
- 在第 1 步部分,不要选择任何 Google 范围。请将此字段留空或输入对服务器有效的范围(如果您不使用 OAuth 范围,则可以输入任意字符串)。完成后,点击授权 API。
- 在 Step 2 和 Step 3 部分中,完成 OAuth 2.0 流程,并验证每个步骤是否按预期运行。
您可以使用 Google 账号关联演示版工具验证您的实现。
在该工具中,执行以下步骤:
- 点击使用 Google 账号登录按钮。
- 选择您要关联的账号。
- 输入服务 ID。
- (可选)输入您要请求访问权限的一个或多个范围。
- 点击开始演示。
- 当系统提示时,请确认您同意或拒绝关联请求。
- 确认您已被重定向到您的平台。