Google OpenID Connect API 參考資料

本頁面說明 Google 如何實作 OpenID Connect 提供者,並提供 Google OIDC 端點的技術參考資料。OpenID Connect (OIDC) Core 1.0 規格定義了驗證使用者及取得身分資訊的通訊協定。

本參考資料並非提供 OIDC 實作方式的逐步說明,如需實作詳細資料,請參閱 OpenID Connect 指南。

探索文件

探索文件包含 Google OpenID Connect 設定的中繼資料,如 OpenID Connect Discovery 1.0 規格所定義。

網址: https://accounts.google.com/.well-known/openid-configuration

支援的要求方法: GET

回應主體

HTTP 回應主體中的 JSON 物件會傳回回應欄位,供要求者向 https://accounts.google.com/.well-known/openid-configuration 提出 GET 要求。

欄位 類型 說明
issuer string 發卡機構識別碼。使用 https 配置的網址 (區分大小寫)。新版的值為 https://accounts.google.com,但舊版實作項目也會傳回 accounts.google.com
authorization_endpoint string 授權端點的網址。
device_authorization_endpoint string 裝置授權端點的網址。
token_endpoint string 權杖端點的網址。
userinfo_endpoint string UserInfo 端點的網址。
revocation_endpoint string 撤銷端點的網址。
jwks_uri string JSON Web Key Set (JWKS) 文件的網址。
response_types_supported array 支援的 response_type 值清單。
response_modes_supported array 支援的 response_mode 值清單。
authorization_response_iss_parameter_supported boolean 布林值,指出是否支援 RFC 9207
subject_types_supported array 支援的主體 ID 類型清單。
id_token_signing_alg_values_supported array 用於簽署 ID 權杖的支援演算法清單。
scopes_supported array 支援的範圍值清單。
claims_supported array 支援的聲明清單。
token_endpoint_auth_methods_supported array 權杖端點支援的驗證方法清單。
code_challenge_methods_supported array PKCE 支援的程式碼驗證方法清單。
grant_types_supported array 支援的 OAuth 2.0 授權類型清單。

ID 權杖 (聲明)

回應中傳回的 id_token 值是已簽署的 JSON Web Token (JWT),必須使用從導覽文件中 jwks_uri 取得的鍵控素材驗證。下表說明解碼後的 ID 權杖酬載內容。

權杖附加資訊 類型 說明
iss string 必要。回覆核發者的核發者 ID。通常為 https://accounts.google.com,但舊版實作也會傳回 accounts.google.com
sub string 必要。使用者的專屬 ID,必須別於任何其他 Google 帳戶,且不得重複使用。Google 帳戶可在不同時間點使用多個電子郵件地址,但 sub 值一律維持不變。在應用程式中,請使用 sub 做為使用者的唯一識別碼。長度上限為 255 個區分大小寫的 ASCII 字元。
azp string 授權簡報者的用戶端 ID,可從 Google Cloud 控制台取得。只有當 ID 權杖的要求者與 ID 權杖的目標對象不同時,才需要使用這項權杖附加資訊。
aud string 必要。ID 權杖的目標對象。這是應用程式的用戶端 ID,可從 Google Cloud 控制台取得。
iat integer 必要。ID 權杖的核發時間。以 Unix Epoch 紀元時間 (整數秒數) 表示。
exp integer 必要。ID 權杖不得接受的到期時間。以 Unix Epoch 紀元時間 (整數秒數) 表示。
nonce string 您的應用程式在驗證要求中提供的 nonce 值。您必須確保該 Nonce 值只會出現一次,以防範重送攻擊。
auth_time integer 使用者驗證時間,以 JSON 數字表示,代表自 Unix 紀元 (1970 年 1 月 1 日 00:00:00 UTC) 經過的秒數。如果驗證要求 claims 參數中包含 auth_time 聲明,系統就會提供這個值。
at_hash string 存取權杖雜湊值。驗證存取權杖是否與 ID 權杖相關聯。如果 ID 權杖是在伺服器流程中發放,且含有 access_token 值,系統一律會納入這項聲明。
email string 使用者的電子郵件地址。只有在要求中加入 email 範圍時,才會提供這項資訊。這項聲明的價值可能不是這個帳戶獨有,而且可能會隨時間變更,因此不應將這個值做為連結至使用者記錄的主要 ID。您也無法依據 email 聲明中的網域,識別 Google Workspace 或 Cloud 機構的使用者,請改用 hd 聲明。

警告:請勿使用電子郵件地址做為 ID,因為 Google 帳戶在不同時間點可能有多個電子郵件地址。請一律使用 sub 欄位做為使用者的 ID。
email_verified boolean 如果使用者的電子郵件地址已完成驗證,則為 true;否則傳回 false。
name string 以可顯示格式呈現的使用者全名。如果要求範圍包含 profile 字串,或 ID 權杖是從權杖更新作業傳回,則可能會提供這項資訊。
picture string 使用者個人資料相片的網址。如果要求範圍包含 profile 字串,或 ID 權杖是從權杖更新作業傳回,則可能會提供這個值。
given_name string 使用者的名字。如果存在 name 聲明,可能會提供此屬性。
family_name string 使用者的姓氏。如果存在 name 聲明,可能會提供此屬性。
hd string 與使用者 Google Workspace 或 Cloud 機構相關聯的網域。只有在使用者屬於 Google Cloud 機構時才提供。如要限制只有特定網域的成員可以存取資源,就必須檢查這項聲明。如果沒有這項聲明,表示帳戶不屬於 Google 代管網域。

授權端點

授權端點用於驗證使用者身分,並取得授權碼或權杖。

網址: https://accounts.google.com/o/oauth2/v2/auth

支援的要求方法: GETPOST

要求參數

參數 類型 必要 說明
client_id string 必填 Google Cloud 控制台取得的用戶端 ID 字串。
nonce string 選用 應用程式產生的隨機值,可啟用重送保護機制。只有在要求 ID 權杖時才需要 (當 response_type 包含 id_token 時)。
response_type string 必填 決定要使用的流程。如果值為 code,系統會啟動授權碼流程,並要求向權杖端點發出 POST,以取得權杖。如果值為 tokenid_tokentoken id_tokenid_token token,系統會啟動隱含流程,因此必須在重新導向 URI 使用 JavaScript,從 URI 片段擷取權杖。強烈建議不要在任何表單中使用 token,因為這會將存取權杖曝露在網址中;OAuth 2.1 禁止使用這個值。
response_mode string 選用 指定授權回應的傳送方式。如果 response_typecode,則預設值為 query。如果是其他回應類型,預設值為 fragment。支援的值:queryfragmentform_post
redirect_uri string 必填 決定回應的傳送位置。這個參數的值必須與您在 Google Cloud 控制台中設定的其中一個授權重新導向值完全相符 (包括 HTTP 或 HTTPS 通訊協定、大小寫和尾端「/」,如有)。重新導向 URI 和授權 JavaScript 來源必須遵守「OAuth 2.0 URI 驗證」文件中列出的驗證規則。
scope string 必填 以空格分隔的範圍未排序清單。清單必須包含 openid 值,然後包含 profile 值、email 值或兩者。您也可以加入非 OIDC 範圍。如果存在 profile 範圍值,ID 權杖可能會 (但不保證) 包含使用者的預設 profile 權杖附加資訊。如果存在 email 範圍值,ID 權杖會包含 emailemail_verified 聲明。詳情請參閱「OAuth 2.0 範圍」。
state string 建議 在通訊協定中來回傳輸的不透明字串;也就是說,在授權碼流程中,系統會將其做為 URI 參數傳回,在隱含流程中,則會做為 URI 片段傳回。state 可用於關聯要求和回應。由於 redirect_uri 可能遭到猜測,使用 state 值可提高保證,確保連入連線是應用程式啟動的驗證要求所致。這可防範跨網站偽造要求等攻擊。
access_type string 選用 允許的值為 offlineonline。如果應用程式需要在使用者不在瀏覽器時重新整理存取權杖,請使用 offline。這是取得重新整理權杖的必要值。
hd string 選用 簡化 Google Cloud 機構所擁有帳戶的登入程序。加入 Google Cloud 機構網域 (例如 mycollege.edu) 後,您就能指出帳戶選取 UI 應針對該網域的帳戶進行最佳化。如要針對一般 Google Cloud 組織帳戶 (而非單一 Google Cloud 組織網域) 進行最佳化,請將值設為星號 (*):hd=*
login_hint string 選用 如果應用程式知道要驗證的使用者是誰,就可以提供這個參數做為驗證伺服器的提示。傳遞這項提示會停用帳戶選擇工具,並預先填寫登入表單上的電子郵件方塊,或選取適當的工作階段,有助於避免應用程式登入錯誤使用者帳戶時發生的問題。這個值可以是電子郵件地址或 sub 字串,後者等同於使用者的 Google ID。
prompt string 選用 以空格分隔的字串值清單,用於指定授權伺服器是否提示使用者重新驗證及同意。可能的值包括:none (無 UI)、consent (提示使用者同意) 和 select_account (提示使用者選取帳戶)。
hl string 選用 用來指定登入、帳戶選擇器和同意畫面顯示語言的 BCP 47 語言標記。不建議使用這個參數,因為瀏覽器設定和 Google 帳戶偏好設定通常更能反映使用者的語言偏好設定。
include_granted_scopes boolean 選用 如果這個參數的值為 true,且授權要求已獲准,授權會包含先前授予這個使用者/應用程式組合的其他範圍授權;請參閱增量授權
claims object 選用 claims 參數可用來指定要在 UserInfo 回應或 ID 權杖中加入的一或多個選用欄位。如要要求 auth_time 聲明,請使用 claims={\"id_token\":{\"auth_time\":{\"essential\":true}}}

回應參數

授權回應會使用 HTTP GET 重新導向,傳送至用戶端的重新導向 URI (redirect_uri)。視 response_typeresponse_mode 而定,回應參數會附加至查詢字串或網址片段中的重新導向 URI。

參數 類型 說明
iss string 發卡機構 ID。根據 RFC 9207,系統一律會傳回這個參數,並設為 https://accounts.google.com
code string 授權碼,可交換存取權杖和 ID 權杖。
state string 與要求中的 state 參數值相同。
id_token string 內含使用者身分資訊的 JSON Web Token (JWT)。
access_token string 可傳送至 Google API 的存取權杖。
token_type string 傳回的權杖類型。一律 Bearer
expires_in integer 存取權杖的生命週期 (以秒為單位),相對於權杖核發時間。
scope string codeaccess_token 授予的存取權範圍,以空格分隔的字串清單表示,且區分大小寫。
error string 如果要求失敗,則為錯誤代碼。
error_description string 如果要求失敗,則會顯示錯誤說明。

錯誤回應

授權端點會將錯誤以查詢字串或網址片段中的參數形式,傳回給用戶端的 redirect_uri,或以 Google 代管的錯誤網頁形式向使用者顯示。

重新導向錯誤

系統可能會將下列錯誤代碼傳回至 redirect_uri

錯誤 說明
access_denied 使用者或授權伺服器拒絕要求。
invalid_request 要求缺少必要參數、內含無效的參數值、內含重複的參數,或格式有誤。
unauthorized_client 用戶端無權使用此方法要求授權碼。
unsupported_response_type 授權伺服器不支援使用這個方法取得授權碼。
invalid_scope 要求的範圍無效、不明或格式錯誤。

面向使用者的錯誤

在某些情況下 (例如 client_idredirect_uri 無效),授權伺服器無法安全地將使用者重新導向至您的應用程式。在這些情況下,系統會直接向使用者顯示錯誤頁面。

錯誤 說明
admin_policy_enforced 由於 Google Workspace 管理員的政策,Google 帳戶無法授權一或多個要求範圍。如要進一步瞭解管理員如何限制存取權,直到明確授予 OAuth 用戶端 ID 存取權為止,請參閱 Google Workspace 管理員說明文章
disallowed_useragent 授權端點顯示在 Google 的 OAuth 2.0 政策禁止使用的內嵌使用者代理程式中。
org_internal 要求中的 OAuth 用戶端 ID 屬於專案,該專案限制只能存取特定 Google Cloud 機構中的 Google 帳戶。
deleted_client 用來提出要求的 OAuth 用戶端已遭刪除。如果用戶端未使用,系統可能會手動或自動刪除。
invalid_grant 使用 PKCE 時,code_challenge 參數無效或遺失。重新整理存取權權杖或使用增量授權時,權杖可能已過期或失效,也可能是使用者帳戶已遭刪除或停用。
redirect_uri_mismatch 要求中傳遞的 redirect_uri 與用戶端 ID 的授權重新導向 URI 不符。在 Google Cloud 控制台中查看已授權的重新導向 URI。如果要求使用已淘汰的 OAuth 頻外 (OOB) 流程,也可能發生這個錯誤。
invalid_client 提出要求的來源未獲授權使用這個用戶端、用戶端設定有誤,或 OAuth 用戶端密鑰不正確。
origin_mismatch 發出授權要求的 JavaScript 的結構定義、網域和/或通訊埠,與為 OAuth 用戶端 ID 註冊的授權 JavaScript 來源 URI 不符。在 Google Cloud 控制台中查看已授權的 JavaScript 來源。
invalid_request 要求有誤,這可能是因為要求格式有誤、缺少必要參數,或是使用 Google 不支援的授權方法。

權杖端點

權杖端點用於交換授權碼,以取得存取權杖和 ID 權杖。

網址: https://oauth2.googleapis.com/token

支援的要求方法: POST

要求參數 (授權碼授予)

參數 類型 必要 說明
code string 必填 從授權端點收到的授權碼。
client_id string 必填 應用程式的用戶端 ID,可從 Google Cloud 控制台取得。
client_secret string 必填 應用程式的用戶端密鑰,可從 Google Cloud 控制台取得。
redirect_uri string 必填 初始授權要求中使用的重新導向 URI。重新導向 URI 和授權 JavaScript 來源必須遵守「OAuth 2.0 URI 驗證」文件中列出的驗證規則。
grant_type string 必填 必須設為「authorization_code」。

要求參數 (裝置流程)

參數 類型 必要 說明
client_id string 必填 應用程式的用戶端 ID,可從 Google Cloud 控制台取得。
client_secret string 必填 應用程式的用戶端密鑰,可從 Google Cloud 控制台取得。
device_code string 必填 裝置授權端點傳回的 device_code
grant_type string 必填 必須設為「urn:ietf:params:oauth:grant-type:device_code」。

要求參數 (重新整理存取權杖)

參數 類型 必要 說明
client_id string 必填 應用程式的用戶端 ID,可從 Google Cloud 控制台取得。
client_secret string 必填 應用程式的用戶端密鑰,可從 Google Cloud 控制台取得。
grant_type string 必填 必須設為 refresh_token,如 OpenID Connect 重新整理權杖規格中所定義。
refresh_token string 必填 授權碼交換作業傳回的重新整理權杖。
scope string 選用 以空格分隔的新存取權杖要求範圍清單。要求的範圍必須是原始授權要求中授予範圍的子集。

回應主體

HTTP 回應主體中的 JSON 物件會傳回回應欄位,供要求者向 https://oauth2.googleapis.com/token 提出 POST 要求。

欄位 類型 說明
access_token string 可傳送至 Google API 的存取權杖。
expires_in integer 存取權杖的生命週期 (以秒為單位),相對於權杖核發時間。
id_token string 內含使用者身分資訊的 JSON Web Token (JWT)。這個權杖會在初始授權碼交換期間傳回,如果已授予 openid 範圍,也會在重新整理權杖要求期間傳回。
scope string access_token授予的存取範圍,以不區分大小寫的字串清單表示,並以空格分隔。
token_type string 傳回的權杖類型。一律 Bearer
refresh_token string (選用) 可用於取得新存取權杖的權杖。如果要求了 access_type=offline,這個欄位只會在授權碼的初始交換中傳回。
refresh_token_expires_in integer (選用) 重新整理權杖的剩餘生命週期 (以秒為單位)。只有在使用者授予時間限制存取權時,系統才會設定這個值。

錯誤回應

如果要求失敗,授權伺服器會傳回具有下列欄位的 JSON 物件:

欄位 類型 說明
error string 錯誤代碼。
error_description string 如果要求失敗,則會顯示錯誤說明。

下表說明可能的錯誤代碼和相關聯的 HTTP 狀態碼:

錯誤 HTTP 狀態碼 說明
invalid_request 400 要求缺少必要參數、包含無效參數值,或格式有誤。
invalid_client 401 用戶端驗證失敗。例如 client_idclient_secret 無效,或是用戶端類型不正確。
invalid_grant 400 提供的授權碼、重新整理權杖或裝置代碼無效、已過期、已遭撤銷,或與授權要求中使用的重新導向 URI 不符。
unauthorized_client 400 經驗證的用戶端無權使用這項授權 Grant Type。
unsupported_grant_type 400 授權伺服器不支援授權 Grant Type。
invalid_scope 400 要求的範圍無效、不明或格式錯誤。
authorization_pending 428 (裝置流程) 使用者尚未完成授權流程。
slow_down 429 (裝置流程) 裝置傳送輪詢要求的頻率過高。
access_denied 403 (裝置流程) 使用者拒絕授予裝置存取權。
expired_token 400 (裝置流程) device_code已過期。
admin_policy_enforced 400 由於 Google Workspace 管理員強制執行的政策,使用者無法授權所要求的範圍。
org_internal 403 用戶端 ID 屬於專案的一部分,可限制特定 Google Cloud 機構的存取權。

裝置授權端點

OAuth 2.0 裝置流程會使用裝置授權端點,為輸入功能有限的裝置取得使用者代碼和驗證網址。

網址: https://oauth2.googleapis.com/device/code

支援的要求方法: POST

要求參數

參數 類型 必要 說明
client_id string 必填 應用程式的用戶端 ID,可從 Google Cloud 控制台取得。
scope string 必填 以空格分隔的範圍清單,可識別應用程式可代表使用者存取的資源。

回應主體

回覆為 JSON 物件,內含下列欄位:

欄位 類型 說明
device_code string Google 專屬指派的值,用於識別執行應用程式的裝置,並要求授權。
user_code string 這個值會區分大小寫,可向 Google 說明應用程式要求存取的範圍。使用者介面會指示使用者在輸入功能較豐富的裝置上輸入這個值。
verification_url string 使用者必須在其他裝置上前往這個網址,輸入 user_code 並授予或拒絕應用程式存取權。
expires_in integer device_codeuser_code 的有效時間長度 (以秒為單位)。
interval integer 裝置在輪詢要求之間應等待的時間長度 (以秒為單位)。

撤銷端點

應用程式可透過撤銷端點撤銷存取權杖或更新權杖。

網址: https://oauth2.googleapis.com/revoke

支援的要求方法: POST

要求參數

參數 類型 必要 說明
token string 必填 要撤銷的存取權杖或更新權杖。

回應主體

如果撤銷成功,回應會是空白的 HTTP 200 OK。如果撤銷失敗,系統會以 JSON 物件傳回錯誤回應。

欄位 類型 說明
error string 如果要求失敗,則為錯誤代碼。
error_description string 如果要求失敗,則會顯示錯誤說明。

下表說明可能的錯誤代碼:

錯誤 說明
invalid_token 要求中提供的權杖已過期或遭到撤銷。
invalid_request 要求缺少必要參數、包含無效參數值,或格式有誤。

UserInfo 端點

UserInfo 端點會傳回已驗證使用者的個人資料資訊。

網址: https://openidconnect.googleapis.com/v1/userinfo

支援的要求方法: GETPOST

要求標頭

標頭 說明
Authorization 必要。必須設為「Bearer: access_token」。

回應主體

HTTP 回應主體中的 JSON 物件會傳回回應欄位,以回應要求者對 https://openidconnect.googleapis.com/v1/userinfo 提出的 GETPOST 要求。

欄位 類型 說明
sub string 必要。使用者的專屬 ID,必須別於任何其他 Google 帳戶,且不得重複使用。區分大小寫的字串,不得超過 255 個字元。
name string 以可顯示格式呈現的使用者全名。
given_name string 使用者的名字。
family_name string 使用者的姓氏。
picture string 使用者個人資料相片的網址。
email string 使用者的電子郵件地址。
email_verified boolean 使用者的電子郵件地址是否已通過驗證。
hd string 與使用者 Google Workspace 或 Cloud 機構相關聯的代管網域。

Tokeninfo 端點

tokeninfo 端點是 Google 專用的實作方式,用於偵錯驗證 ID 權杖。

網址: https://oauth2.googleapis.com/tokeninfo

支援的要求方法: GETPOST

要求參數

參數 類型 必要 說明
id_token string 必填 要驗證的 ID 權杖。

回應主體

HTTP 回應主體中的 JSON 物件會傳回回應欄位,以回應要求者對 https://oauth2.googleapis.com/tokeninfo 提出的 GETPOST 要求。

欄位 類型 說明
iss string 發卡機構 ID。一律 https://accounts.google.com
sub string 使用者的專屬 ID,必須別於任何其他 Google 帳戶,且不得重複使用。
aud string ID 權杖的目標對象。這是應用程式的用戶端 ID,可從 Google Cloud 控制台取得。
iat integer JWT 的簽發時間。以從 1970-01-01T0:0:0Z 算起的秒數表示 (以世界標準時間測量)。
exp integer ID 權杖的到期時間,在此時間之後不得接受該權杖進行處理。以從 1970-01-01T0:0:0Z 算起的秒數表示,測量單位為世界標準時間。
email string 使用者的電子郵件地址。
email_verified string 使用者的電子郵件地址是否已通過驗證。值為字串 "true""false"
access_type string 原始授權要求中要求的存取權類型。
azp string 授權表示器的用戶端 ID,可從 Google Cloud 控制台取得。
scope string 以空格分隔的權杖授權範圍清單。
alg string 用於簽署 ID 權杖的演算法。
kid string 用於簽署 ID 權杖的金鑰 ID。
typ string 權杖類型。一律 JWT