如要支援 OAuth 2.0 隱含流程,您的服務會透過 HTTPS 提供授權端點。這個端點負責驗證,並取得使用者同意授權資料存取權。授權端點會向尚未登入的使用者顯示登入 UI,並記錄對所要求存取權的同意聲明。
當 Google 應用程式需要呼叫您服務的授權 API 時,Google 會使用這個端點取得使用者授權,代表他們呼叫這些 API。
Google 帳戶連結:OAuth 隱含流程
下方的序列圖詳細說明使用者、Google 和服務端點之間的互動。
角色與職責
下表定義 Google 帳戶連結 (GAL) OAuth 隱含流程中參與者的角色和職責。請注意,在 GAL 中,Google 會擔任 OAuth 用戶端,而您的服務則擔任身分/服務供應商。
| 執行者 / 元件 | GAL 角色 | 職責 |
|---|---|---|
| Google 應用程式 / 伺服器 | OAuth 用戶端 | 啟動流程、透過瀏覽器重新導向接收存取權杖,並安全地儲存權杖,以便存取服務的 API。 |
| 您的授權端點 | 授權伺服器 | 驗證使用者身分、取得使用者同意聲明,並直接向 Google 發放長期存取權杖。 |
| Google 重新導向 URI | 回呼端點 | 從授權服務接收使用者重新導向,網址片段中包含 access_token 和 state 值。 |
Google 啟動的一般 OAuth 2.0 隱含流程工作階段如下:
- Google 會在使用者瀏覽器中開啟授權端點。使用者登入 (如果尚未登入),並授權 Google 透過您的 API 存取資料 (如果尚未授權)。
- 您的服務會建立存取權杖,並傳回給 Google。如要這麼做,請將使用者的瀏覽器重新導向回 Google,並在要求中附加存取權杖。
- Google 會呼叫服務的 API,並在每個要求中附加存取權杖。服務會驗證存取權杖是否授權 Google 存取 API,然後完成 API 呼叫。
導入作業參考資料
請按照下列步驟導入隱含流程。
步驟 1:處理授權要求
Google 啟動帳戶連結程序時,會將使用者重新導向至授權端點。如需詳細的通訊協定合約和參數規定,請參閱「授權端點」。
如要處理要求,請執行下列動作:
驗證要求:
- 確認
client_id與指派給 Google 的用戶端 ID 相符。 - 確認
redirect_uri與預期的 Google 重新導向網址相符:none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID - 確認
response_type為token。
- 確認
驗證使用者:
- 確認使用者是否已登入您的服務。
- 如果使用者未登入,請提示他們完成登入或註冊流程。
產生存取權杖:
- 建立與使用者和用戶端相關聯的專屬存取權杖,且該權杖無法猜測。
重新導向回 Google:
- 將瀏覽器重新導向至
redirect_uri中提供的網址。 - 在網址片段 (雜湊) 中附加下列參數:
access_token:您產生的存取權杖。token_type:必須為bearer。state:從 Google 收到的未修改狀態值。
- 將瀏覽器重新導向至
處理使用者資訊要求
userinfo 端點是 OAuth 2.0 受保護的資源,可傳回已連結使用者的聲明。除了下列用途外,不一定要實作並代管 userinfo 端點:
成功從權杖端點擷取存取權杖後,Google 會向您的使用者資訊端點傳送要求,以擷取已連結使用者的基本個人資料。
| userinfo 端點要求標頭 | |
|---|---|
Authorization header |
Bearer 類型的存取權杖。 |
舉例來說,如果您的 userinfo 端點位於
https://myservice.example.com/userinfo,要求可能如下所示:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
為了讓 userinfo 端點處理要求,請按照下列步驟操作:
- 從授權標頭擷取存取權杖,然後為與存取權杖相關聯的使用者傳回資訊。
- 如果存取權杖無效,請使用
WWW-Authenticate回應標頭傳回 HTTP 401 Unauthorized 錯誤。以下是 userinfo 錯誤回應的範例: 敬上 如果連結過程中傳回 401 未授權錯誤或其他失敗錯誤回應,將無法復原錯誤,擷取到的憑證將遭到捨棄,使用者必須再次啟動連結程序。HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
如果存取權杖有效,則傳回並傳回 HTTP 200 回應,且 HTTPS 內文含有下列 JSON 物件 回應:
敬上 如果您的 userinfo 端點傳回 HTTP 200 成功回應,則會根據使用者的 Google 帳戶登錄擷取的權杖和憑證附加資訊。{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }userinfo 端點回應 sub用來在系統中識別使用者的專屬 ID。 email使用者的電子郵件地址。 given_name選填:使用者的名字。 family_name選填:使用者的姓氏。 name選填:使用者全名。 picture選用:使用者的個人資料相片。