Google Cloud 發行多種權杖,這些權杖的用途和交易對象各不相同。
下表概略說明主要權杖類別,其中包含不同類型的權杖。
權杖類別 | 通訊路徑 | 目的 |
---|---|---|
存取權杖 | 授權伺服器 ⭢ 用戶端 ⭢ Google API | 允許用戶端呼叫 Google Cloud API。 |
權杖授予權杖 | 授權伺服器 ⭤ 用戶端 | 讓用戶取得新的或不同的權杖,可能是在稍後的時間點。 |
身分符記 | 授權伺服器 ⭢ 用戶端 | 讓用戶端識別互動對象。 |
存取和身分權杖是持有者權杖。不記名憑證是一般類型的憑證,可授予憑證持有者存取權。
使用不記名權杖進行驗證時,必須仰賴加密通訊協定 (例如 HTTPS) 提供的安全性。如果持有人權杖遭到攔截,不肖人士就能用來取得存取權。
如果不記名權杖無法為您的用途提供足夠的安全性,您可以透過情境感知存取、限制存取權杖的生命週期,或使用雙向傳輸層安全 (mTLS) 解決方案 (例如 Chrome Enterprise Premium),降低權杖遭竊的風險。
存取權杖
存取權杖可讓用戶端向 API 發出經過驗證的呼叫。 Google Cloud 支援多種不同類型的存取權杖,這些權杖具有下列共同屬性: Google Cloud
驗證主體 (可以是使用者或工作負載)。
這些憑證是核發給特定用戶端。
這類權杖的效期很短,最多只有幾小時。
只能存取特定 OAuth 範圍、端點或資源。也就是說,存取權杖通常不會授予使用者所有資源的存取權,而只會授予部分資源的存取權。
存取權杖可能會有以下差異:
核發者:核發權杖的當事人。
主體:權杖可驗證的主體類型。
限制:可對權杖施加的限制。
下表列出不同類型的存取權杖:
權杖類型 | 核發單位 | 主體 | 限制 |
---|---|---|---|
使用者存取權杖 | Google 授權伺服器 |
|
個 OAuth 範圍 |
服務帳戶存取權杖 |
|
服務帳戶 | 個 OAuth 範圍 |
全網域委派權杖 | Google 授權伺服器 | 使用者 (受管理使用者) | 個 OAuth 範圍 |
服務帳戶 JSON Web Token (JWT) | 客戶 | 服務帳戶 | OAuth 範圍或 API |
聯盟存取權杖 | Google Cloud IAM 授權伺服器 |
|
個 OAuth 範圍 |
憑證存取權範圍權杖 | Google Cloud IAM 授權伺服器 |
|
特定 Cloud Storage 物件 |
用戶端核發的憑證存取權範圍權杖 | 客戶 | 服務帳戶 | 特定 Cloud Storage 物件 |
不同類型的存取權杖也具有不同的安全性屬性:
格式:部分存取權杖是不透明的,也就是採用專有格式,無法檢查。其他權杖則會編碼為 JSON Web Token,可由用戶端解碼。
內省性:部分不透明權杖可使用Google Cloud API 內省,其他則無法。
生命週期:權杖的生命週期和可修改程度各不相同。
可撤銷性:部分權杖可以撤銷。其他權杖在到期前仍有效。
下表摘要說明存取權杖類型之間的差異。
權杖類型 | 格式 | Introspectable | 效期 | 可撤銷 |
---|---|---|---|---|
使用者存取權杖 | Opaque | 是 | 1 小時 | 是 |
服務帳戶存取權杖 | Opaque | 是 | 5 分鐘到 12 小時 | 否 |
全網域委派符記 | Opaque | 是 | 1 小時 | 否 |
服務帳戶 JSON Web Token (JWT) | JWT | 不適用 | 5 分鐘至 1 小時 | 否 |
聯盟存取權杖 | Opaque | 否 | 請參閱「聯盟存取權杖」。 | 否 |
憑證存取權範圍權杖 | Opaque | 否 | 請參閱「 憑證存取權範圍權杖」。 | 否 |
用戶端核發的憑證存取權範圍權杖 | Opaque | 否 | 不適用 | 否 |
使用者存取權杖
使用者存取權杖會驗證使用者身分,並授權用戶端代表使用者執行動作:
已驗證的主體是受管理的使用者帳戶或消費者帳戶。用戶端可以是網路應用程式或原生應用程式。
使用者存取權杖是不透明的,為進行診斷,您可以使用下列指令檢查存取權杖,並將 ACCESS_TOKEN
替換為有效的存取權杖:
curl "https://oauth2.googleapis.com/tokeninfo?access_token=ACCESS_TOKEN"
這項指令會產生類似下列範例的輸出內容:
{
"azp": "0000000000.apps.googleusercontent.com",
"aud": "0000000000.apps.googleusercontent.com",
"sub": "00000000000000000000",
"scope": "openid https://www.googleapis.com/auth/userinfo.email",
"exp": "1744687132",
"expires_in": "3568",
"email": "user@example.com",
"email_verified": "true"
}
輸出內容包含下列欄位:
欄位 | 名稱 | 說明 |
---|---|---|
aud |
目標對象 |
這個權杖適用的 OAuth 用戶端,可透過 OAuth 用戶端 ID識別。 OAuth 用戶端可以為屬於同一專案的其他 OAuth 用戶端取得存取權杖。目標對象可能與授權方不同。 |
azp |
授權方 | 要求權杖的 OAuth 用戶端,可透過 OAuth 用戶端 ID 識別。 |
email |
主要電子郵件地址 |
使用者的主要電子郵件地址。
只有在權杖包含
|
exp |
到期 | 權杖的到期時間,採用 Unix 紀元時間格式。 |
scope |
個 OAuth 範圍 | 用戶端可代表使用者存取的一組 API,由 OAuth 範圍識別。 |
sub |
主旨 |
經過驗證的主體,由專屬 ID 識別。 這個 ID 等於 Directory API 中公開的 ID。 |
使用者存取權杖會在 1 小時後自動失效,但您也可以視需要提早撤銷。
根據預設,使用者存取權權杖是持有者權杖,也就是說,這類權杖不會繫結至任何特定通訊管道、網路或額外憑證。您可以選擇部署以憑證為基礎的存取權,實作權杖繫結,這樣一來,使用者存取權杖就只能搭配有效的 mTLS 用戶端憑證使用。
服務帳戶存取權杖
服務帳戶存取權杖可驗證服務帳戶。這些權杖是不透明的,您可以使用 https://oauth2.googleapis.com/tokeninfo
API 內省權杖。
如果是服務帳戶存取權杖,API 會傳回類似下列範例的輸出內容:
{
"azp": "000000000000000000000",
"aud": "000000000000000000000",
"scope": "https://www.googleapis.com/auth/userinfo.email",
"exp": "1744687132",
"expires_in": "3568",
"email": "service-account@example.iam.gserviceaccount.com",
"email_verified": "true",
"access_type": "online"
}
服務帳戶權杖包含下列欄位:
欄位 | 名稱 | 說明 |
---|---|---|
aud |
目標對象 | 權杖適用的服務帳戶,相當於授權方。 |
azp |
授權方 | 要求權杖的服務帳戶,以專屬 ID 識別。 |
email |
主要電子郵件地址 |
服務帳戶的電子郵件地址。
只有在權杖包含
|
exp |
到期 | 權杖的到期時間,採用 Unix 紀元時間格式。 |
服務帳戶存取權杖無法撤銷,且在過期前都有效。
依預設,服務帳戶存取權憑證會在 1 小時後失效。使用 serviceAccounts.generateAccessToken
方法,即可要求不同有效時間的權杖。由於權杖存留時間越長,風險就越高,因此您必須設定 iam.allowServiceAccountCredentialLifetimeExtension
限制,允許用戶端要求存留時間超過一小時的服務帳戶存取權杖。
全網域委派符記
全網域委派權杖會驗證使用者身分,並授權服務帳戶代表使用者執行動作。這些權杖是不透明的,您可以使用 https://oauth2.googleapis.com/tokeninfo
API 檢查權杖。
如果是全網域委派權杖,API 會傳回類似下列範例的輸出內容:
{
"azp": "000000000000000000000",
"aud": "000000000000000000000",
"scope": "https://www.googleapis.com/auth/admin.directory.user.readonly https://www.googleapis.com/auth/userinfo.email",
"exp": "1744688957",
"expires_in": "3540",
"email": "user@example.com",
"email_verified": "true",
"access_type": "offline"
}
全網域委派權杖包含下列欄位:
欄位 | 名稱 | 說明 |
---|---|---|
aud |
目標對象 | 權杖適用的服務帳戶,相當於授權方。 |
azp |
授權方 | 要求權杖的服務帳戶,以專屬 ID 識別。 |
email |
主要電子郵件地址 |
遭冒用者的主要電子郵件地址。 只有在權杖包含
|
exp |
到期 | 權杖的到期時間,採用 Unix 紀元時間格式。 |
scope |
個 OAuth 範圍 | 用戶端可代表模擬使用者存取的一組 API,由 OAuth 範圍識別。 |
全網域委派權杖會在 1 小時後自動失效,且無法撤銷。
服務帳戶 JSON Web Token
服務帳戶 JSON Web Token (JWT) 可驗證服務帳戶。服務帳戶存取權杖是由授權伺服器核發,而服務帳戶 JWT 則可由用戶端自行核發。
有時也稱為「自行簽署」的 JWT。如果您需要向某些 Google API 進行驗證,但不想從授權伺服器取得存取權杖 (例如建立自己的用戶端程式庫時),這類憑證就非常實用。
如要核發服務帳戶 JWT,用戶端必須執行下列步驟:
準備 JSON Web 簽章酬載,其中包含服務帳戶的電子郵件地址、OAuth 範圍或 API 端點,以及到期時間。
使用相應服務帳戶的服務帳戶金鑰簽署酬載。用戶端可以使用使用者代管的服務帳戶金鑰離線簽署酬載,也可以使用
signJwt
方法和 Google 代管的服務帳戶金鑰線上簽署。詳情請參閱「建立自行簽署的 JSON Web Token」。
解碼後的服務帳戶 JWT 類似於下列內容,其中 SIGNATURE
會替換為權杖的簽章:
{
"alg": "RS256",
"kid": "290b7bf588eee0c35d02bf1164f4336229373300",
"typ": "JWT"
}.{
"iss": "service-account@example.iam.gserviceaccount.com",
"sub": "service-account@example.iam.gserviceaccount.com",
"scope": "https://www.googleapis.com/auth/cloud-platform",
"exp": 1744851267,
"iat": 1744850967
}.SIGNATURE
服務帳戶 JWT 可在 aud
金鑰中指定 API 端點,而不必在 scope
金鑰中指定 OAuth 範圍:
{
"alg": "RS256",
"kid": "290b7bf588eee0c35d02bf1164f4336229373300",
"typ": "JWT"
}.{
"iss": "service-account@example.iam.gserviceaccount.com",
"sub": "service-account@example.iam.gserviceaccount.com",
"aud": "https://cloudresourcemanager.googleapis.com/",
"exp": 1744854799,
"iat": 1744851199
}.SIGNATURE
服務帳戶 JWT 包含下列欄位:
欄位 | 名稱 | 說明 |
---|---|---|
aud |
目標對象 |
用戶端可存取的 API 端點。必須未指定 scope 才會生效。 |
exp |
到期 | 權杖的到期時間,採用 Unix 紀元時間格式。 |
iat |
問題時間 | 權杖核發時間,採用 Unix 紀元時間格式。 |
iss |
核發單位 | 憑證的簽發者,也就是服務帳戶本身。 |
scope |
個 OAuth 範圍 |
用戶端可存取的 API 集,由
OAuth 範圍識別。只有在未指定 aud 時才會生效。
|
sub |
主旨 | 經過驗證的主體,也就是服務帳戶本身。 |
服務帳戶 JWT 的效期最長為一小時,且無法撤銷。
聯盟存取權杖
聯合存取權杖會驗證工作負載集區主體或工作團隊集區主體。
員工身分聯盟可讓用戶端交換外部權杖,取得用於驗證工作團隊集區主體的聯盟存取權杖。工作負載身分集區主體會以類似下列的主體 ID 識別:
principal://iam.googleapis.com/locations/global/workforcePools/POOL/subject/raha@altostrat.com.
工作負載身分聯盟可讓用戶端交換外部權杖,取得用來驗證工作負載集區主體的聯盟存取權杖。工作負載身分集區主體會以類似下列的主體 ID 識別:
principal://iam.googleapis.com/projects/PROJECT/locations/global/workloadIdentityPools/POOL/subject/SUBJECT_ATTRIBUTE_VALUE
同盟存取權杖是不透明的,無法內省。權杖無法撤銷,且在到期前都有效。各類型的權杖到期時間取決於下列因素:
員工身分聯盟會根據員工身分集區提供者設定,設定權杖到期時間。
Workload Identity Federation 會設定權杖到期時間,使其與外部權杖的到期時間相符。
憑證存取權範圍權杖
憑證存取權界線權杖會驗證使用者或服務帳戶,並包含存取權界線。存取權界線會限制權杖,因此權杖只能用於存取 Cloud Storage 資源的定義子集。
憑證存取權界線權杖有時也稱為「範圍縮減」,因為這類權杖是從輸入權杖衍生而來,但可授予存取權的資源受到更多限制。
憑證存取邊界權杖的到期時間是根據輸入權杖的到期時間而定,輸入權杖可以是使用者存取權杖或服務帳戶存取權杖。憑證存取權限範圍權杖是不透明的,無法內省或撤銷。
用戶端核發的憑證存取權範圍權杖
用戶端核發的憑證存取權範圍權杖與憑證存取權範圍權杖類似,但適用於用戶端需要以高頻率取得不同存取權範圍的憑證存取權範圍權杖的情況。
用戶端可以使用 Cloud 用戶端程式庫和存取邊界中介權杖,在本機建立用戶端核發的憑證存取邊界權杖,但必須定期重新整理。
用戶端核發的憑證存取權界線權杖是不透明的,無法進行內省或撤銷。
授權權杖的權杖
權杖授予權杖可讓用戶端取得新的或不同的權杖,可能是在稍後的時間。 Google Cloud 支援多種不同類型的權杖授予權杖,這些權杖都具有下列共同點:
代表先前的驗證。
這些服務會驗證主體,主體可以是 Google 身分 (使用者或工作負載) 或外部身分。
並兌換成存取權杖。
這類權杖無法用於呼叫 Google API,因此與存取權杖不同。
授予權杖的權杖可能會有以下差異:
核發者:核發權杖的當事人。
主體:權杖可驗證的主體身分類型。
限制:可對權杖施加的限制。
下表列出不同類型的權杖授予權杖。
權杖類型 | 核發單位 | 已兌換的存取權杖類型 | 主體 | 限制 |
---|---|---|---|---|
更新權杖 | Google 授權伺服器 | 使用者存取權杖 |
|
個 OAuth 範圍 |
授權碼 | Google 授權伺服器 | 使用者存取權杖 |
|
個 OAuth 範圍 |
服務帳戶 JSON Web Token 聲明 | 客戶 |
|
|
個 OAuth 範圍 |
外部 JSON Web Token | 外部識別資訊提供者 | 聯盟存取權杖 | 外部主體 | 無 |
外部 SAML 判斷或回應 | 外部識別資訊提供者 | 聯盟存取權杖 | 外部主體 | 無 |
Amazon Web Services (AWS) GetCallerIdentity 權杖
|
外部識別資訊提供者 | 聯盟存取權杖 | 外部主體 | 無 |
不同類型的權杖授予權杖也展現不同的安全性屬性:
格式:部分權杖是不透明的。其他權杖則可由用戶端解碼。
生命週期:權杖的生命週期各不相同,可修改的程度也不同。
多次使用:部分授予權杖的權杖只能使用一次。其他權杖可重複使用。
可撤銷性:部分權杖可以撤銷。其他權杖在到期前仍有效。
下表摘要列出授予權杖的權杖,在這些屬性方面的差異:
權杖類型 | 格式 | 效期 | 可撤銷 | 多次使用 |
---|---|---|---|---|
重新整理權杖 | Opaque | 請參閱「更新權杖」。 | 是 | 是 |
授權碼 | Opaque | 10 分鐘 | 否 | 否 |
服務帳戶 JSON Web Token 聲明 | JWT | 5 分鐘至 1 小時 | 否 | 是 |
外部權杖或外部 JSON Web Token | JWT | 視識別資訊提供者而定 | 視識別資訊提供者而定 | 是 |
外部 SAML 聲明或回應 | SAML | 視識別資訊提供者而定 | 視識別資訊提供者而定 | 是 |
Amazon Web Services (AWS) GetCallerIdentity 權杖 |
文字 blob | 視識別資訊提供者而定 | 視識別資訊提供者而定 | 是 |
更新權杖
更新權杖是不透明的權杖,如果使用者先前授權用戶端代表自己執行動作,用戶端就能取得使用者的 ID 權杖和存取權杖。
更新權杖會與特定用戶端綁定,且只能搭配有效用戶端憑證使用,例如用戶端 ID 和用戶端密鑰。
如果用戶端的授權包含一或多個 Google Cloud OAuth 範圍,則重新整理權杖的效期會受到Google Cloud 工作階段長度控制。否則,重新整理權杖在使用者撤銷授權或發生其他權杖撤銷事件前,都會維持有效。
授權碼
授權碼是不透明的短期權杖。 這些代碼僅供使用者驗證期間使用,做為用戶端和 Google 授權伺服器之間的媒介。
授權碼與重新整理權杖一樣,都與用戶端相關聯,且只能搭配有效的用戶端憑證使用。授權碼只能使用一次,與重新整理權杖不同。
服務帳戶 JSON Web Token 聲明
服務帳戶 JSON Web Token (JWT) 聲明會聲明服務帳戶的身分。工作負載可以使用服務帳戶 JWT 聲明,取得服務帳戶存取權杖或全網域委派權杖。服務帳戶 JWT 聲明是由服務帳戶金鑰簽署。
解碼後的服務帳戶 JWT 聲明看起來如下所示,其中 SIGNATURE
會替換為權杖的簽章:
{
"alg": "RS256",
"kid": "290b7bf588eee0c35d02bf1164f4336229373300",
"typ": "JWT"
}.{
"iss": "service-account@example.iam.gserviceaccount.com",
"scope": "https://www.googleapis.com/auth/devstorage.read_only",
"aud": "https://oauth2.googleapis.com/token",
"exp": 1744851267,
"iat": 1744850967
}.SIGNATURE
服務帳戶 JWT 聲明在結構上與服務帳戶 JWT 類似:這兩種權杖都可由用戶端本身核發,並由服務帳戶金鑰簽署。不過,這兩種權杖使用的酬載不同,詳情請參閱下表。
欄位 | 服務帳戶 JWT | 服務帳戶 JWT 聲明 |
---|---|---|
aud |
Google Cloud API,如果指定 scope ,則會省略 |
必須為 https://oauth2.googleapis.com/token |
exp |
到期 | 到期 |
iat |
問題時間 | 問題時間 |
iss |
服務帳戶的電子郵件地址 | 服務帳戶的電子郵件地址 |
scope |
OAuth 範圍 (如果指定 |
個 OAuth 範圍 |
sub |
服務帳戶的電子郵件地址 | 全網域委派的使用者帳戶電子郵件地址,否則會省略 |
服務帳戶 JWT 聲明最多可有效一小時,且無法撤銷。
外部 JSON Web Token
外部 JSON Web Token (JWT) 由外部身分識別提供者核發,例如 Microsoft Entra ID、Okta、Kubernetes 或 GitHub。結構和內容可能有所不同。
設定員工身分聯盟或工作負載身分聯盟後,您可以在 Google Cloud 和外部身分提供者之間建立信任關係。工作負載隨後就能使用外部 JWT 做為權杖授予權杖,取得同盟存取權杖。
使用員工身分聯盟時,產生的聯合存取權杖會驗證員工身分集區主體。
使用 Workload Identity 聯盟時,產生的聯合存取權杖會驗證工作負載身分識別集區主體。
在這兩種情況下,主體 ID 都是從外部 JWT 的一或多項聲明衍生而來。
如要與員工身分聯盟或 Workload Identity 聯盟相容,外部 JWT 必須符合特定需求。
外部 SAML 聲明或回應
外部安全宣告標記語言 (SAML) 聲明是由外部身分識別提供者 (例如 Microsoft Entra ID、Okta 或 Active Directory 同盟服務) 發布的 SAML 2.0 聲明。這些外部 SAML 聲明可視需要封裝在 SAML 2.0 回應中,或進行加密。
與外部 JSON Web Token 類似,您可以設定員工身分聯盟或工作負載身分聯盟,讓工作負載使用外部 SAML 判斷提示或回應做為權杖授予權杖,以取得聯盟存取權杖。
如要與員工身分聯盟或 Workload Identity 聯盟相容,外部 SAML 判斷必須符合特定需求。
Amazon Web Services (AWS) GetCallerIdentity
權杖
外部 AWS GetCallerIdentity
權杖是文字 Blob,其中包含對 AWS GetCallerIdentity
API 的簽署要求。與外部 JSON Web Token 和 SAML 聲明類似,您可以設定員工身分聯盟或工作負載身分聯盟,讓工作負載使用這些文字 Blob 做為權杖授予權杖,以取得聯盟存取權杖。
身分符記
用戶端可透過 ID 權杖識別互動對象。 Google Cloud 支援多種不同類型的 ID 權杖,這些權杖的共同點如下:
這些權杖會格式化為 JSON Web Token (JWT),方便用戶端解碼、驗證及解讀。
驗證主體 (可以是使用者或工作負載)。
這些憑證是核發給特定用戶端。
這類憑證的效期很短,最多一小時就會失效。
且無法撤銷。
這類權杖無法用於發出 Google API 呼叫,因此與存取權杖不同。
這類權杖無法用來取得存取權杖,因此與權杖授權權杖不同。
身分權杖的差異如下:
目標對象:預計解碼及使用權杖的當事人。
核發者:核發權杖的當事人。
生命週期:權杖的生命週期不同,可修改的程度也不同。
主體:權杖可驗證的主體身分類型。
下表列出不同類型的 ID 權杖。
權杖類型 | 核發單位 | 目標對象 | 主體 | 效期 |
---|---|---|---|---|
使用者 ID 權杖 | Google 授權伺服器 | OAuth/OIDC 用戶端 |
|
1 小時 |
服務帳戶 ID 權杖 | Google Cloud IAM 授權伺服器 | 可自由選擇任何目標對象 | 服務帳戶 | 1 小時 |
Identity-Aware Proxy (IAP) 聲明 | IAP |
|
|
10 分鐘 |
SAML 聲明 | Google 授權伺服器 | SAML 應用程式 | 使用者 (受管理使用者) | 10 分鐘 |
使用者 ID 權杖
使用者 ID 權杖是驗證使用者的 JSON Web Token (JWT)。用戶端可以啟動 OIDC 驗證流程,取得使用者 ID 權杖。
使用者 ID 權杖會使用 Google JSON Web Key Set (JWKS) 簽署。Google JWKS 是全球資源,不同類型的使用者 (包括下列對象) 都會使用相同的簽署金鑰:
受管理的使用者帳戶
個人使用者帳戶
服務帳戶
解碼後的使用者 ID 權杖如下所示,其中 SIGNATURE
會替換為權杖的簽章:
{
"alg": "RS256",
"kid": "c37da75c9fbe18c2ce9125b9aa1f300dcb31e8d9",
"typ": "JWT"
}.{
"iss": "https://accounts.google.com",
"azp": "1234567890-123456789abcdef.apps.googleusercontent.com",
"aud": "1234567890-123456789abcdef.apps.googleusercontent.com",
"sub": "12345678901234567890",
"at_hash": "y0LZEe-ervzRNSxn4R-t9w",
"name": "Example user",
"picture": "https://lh3.googleusercontent.com/a/...",
"given_name": "Example",
"family_name": "User",
"hd": "example.com",
"iat": 1745361695,
"exp": 1745365295
}.SIGNATURE
ID 權杖包含下列欄位:
欄位 | 名稱 | 說明 |
---|---|---|
aud |
目標對象 |
這個權杖適用的 OAuth 用戶端,可透過 OAuth 用戶端 ID 識別。 OAuth 用戶端可以為屬於同一專案的其他 OAuth 用戶端取得存取權杖。在這種情況下,目標對象可能與授權方不同。 |
azp |
授權方 | 執行 OIDC 驗證流程的 OAuth 用戶端,可透過 OAuth 用戶端 ID 識別。 |
exp |
到期 | 權杖的到期時間,採用 Unix 紀元時間格式。 |
hd |
代管網域 |
使用者 Cloud Identity 或 Google Workspace 帳戶的主網域。
只有在使用者是受管理的使用者帳戶,且用戶端在驗證要求中指定
|
iss |
核發單位 |
權杖核發者。一律設為 https://accounts.google.com 。
|
sub |
主旨 |
經過驗證的主體,由專屬 ID 識別。 這個 ID 等於 Directory API 中公開的 ID。 |
ID 權杖中包含的確切憑證集,取決於驗證要求中的 scope
參數。
如要判斷使用者是否為受管理的使用者帳戶,或判斷使用者所屬的 Cloud Identity 或 Google Workspace 帳戶,用戶端必須檢查 hd
聲明。
使用者 ID 權杖的效期為一小時,且無法撤銷。
服務帳戶 ID 權杖
服務帳戶 ID 權杖是 JSON Web Token (JWT),用於驗證服務帳戶。
與服務帳戶 JWT 和服務帳戶 JWT 聲明不同,服務帳戶 ID 權杖並非由服務帳戶金鑰簽署。服務帳戶 ID 憑證是由 Google JSON Web Key Set (JWKS) 簽署。
解碼後的服務帳戶 ID 權杖如下所示,其中 SIGNATURE
會替換為權杖的簽章:
{
"alg": "RS256",
"kid": "c37da75c9fbe18c2ce9125b9aa1f300dcb31e8d9",
"typ": "JWT"
}.{
"aud": "example-audience",
"azp": "112010400000000710080",
"email": "service-account@example.iam.gserviceaccount.com",
"email_verified": true,
"exp": 1745365618,
"iat": 1745362018,
"iss": "https://accounts.google.com",
"sub": "112010400000000710080"
}.SIGNATURE
服務帳戶 ID 權杖包含下列欄位:
欄位 | 名稱 | 說明 |
---|---|---|
aud |
目標對象 | 這個權杖所屬參與方的 ID。權杖要求者可自由選擇值。 |
azp |
授權方 | 要求權杖的服務帳戶,以專屬 ID 識別。 |
exp |
到期 | 權杖的到期時間,採用 Unix 紀元時間格式。 |
iss |
核發單位 |
權杖的簽發者,一律設為 https://accounts.google.com 。 |
sub |
主旨 | 要求權杖的服務帳戶,以專屬 ID 識別。 |
ID 權杖中包含的確切聲明集,取決於 ID 權杖的請求方式。舉例來說,Compute Engine 中繼資料伺服器要求的身分 ID 權杖可以選擇性地包含額外聲明,用來確認 VM 的身分。使用 IAM Credentials API 要求的 ID 權杖,可選擇性包含服務帳戶專案的機構 ID。
與使用者 ID 權杖不同,服務帳戶 ID 權杖不支援 hd
聲明。
服務帳戶 ID 權杖的效期為一小時,且無法撤銷。
Identity-Aware Proxy 聲明
Identity-Aware Proxy (IAP) 聲明是 JSON Web Token (JWT),IAP 會在 x-goog-iap-jwt-assertion
HTTP 要求標頭中,將這些聲明傳遞至受 IAP 保護的網路應用程式。IAP 聲明可驗證使用者身分,並做為要求已由 IAP 授權的證明。
與使用者 ID 憑證和服務帳戶 ID 憑證不同,IAP 聲明不會使用 Google JSON Web Key Set (JWKS) 簽署。而是使用另一個 JWKS (即 IAP JWKS) 簽署 IAP 聲明。這個 JWKS 是全域資源,且不同類型的使用者會使用相同的簽署金鑰,包括:
受管理的使用者帳戶
個人帳戶
服務帳戶
工作團隊身分集區主體
解碼後的 IAP 聲明類似於下列內容,但 SIGNATURE
會替換為權杖的簽章:
{
"alg": "ES256",
"typ": "JWT",
"kid": "4BCyVw"
}.{
"aud": "/projects/0000000000/global/backendServices/000000000000",
"azp": "/projects/0000000000/global/backendServices/000000000000",
"email": "user@example.com",
"exp": 1745362883,
"google": {
"access_levels": [
"accessPolicies/0000000000/accessLevels/Australia"
]
},
"hd": "example.com",
"iat": 1745362283,
"identity_source": "GOOGLE",
"iss": "https://cloud.google.com/iap",
"sub": "accounts.google.com:112010400000000710080"
}.SIGNATURE
如果您設定 IAP 使用員工身分聯盟,而非 Google 身分,IAP 聲明會稍有不同:
{
"alg": "ES256",
"typ": "JWT",
"kid": "4BCyVw"
}.{
"aud": "/projects/0000000000/global/backendServices/000000000000",
"azp": "/projects/0000000000/global/backendServices/000000000000",
"email": "user@example.com",
"exp": 1745374290,
"google": {
"access_levels": [
"accessPolicies/0000000000/accessLevels/Australia"
]
},
"iat": 1745373690,
"identity_source": "WORKFORCE_IDENTITY",
"iss": "https://cloud.google.com/iap",
"sub": "sts.google.com:AAFTZ...Q",
"workforce_identity": {
"iam_principal": "principal://iam.googleapis.com/locations/global/workforcePools/example/subject/user-0000000000",
"workforce_pool_name": "locations/global/workforcePools/example"
}
}.SIGNATURE
IAP 聲明包含下列欄位:
欄位 | 名稱 | 說明 |
---|---|---|
aud |
目標對象 | IAP 判斷結果適用的後端服務、App Engine 應用程式或 Cloud Run 服務。 |
iss |
核發單位 |
權杖的簽發者,一律設為
https://cloud.google.com/iap
|
sub |
主旨 |
經過驗證的主體,由專屬 ID 識別。 如果 IAP 設定為使用 Google 身分,這個 ID 就等同於 Directory API 中公開的 ID。 |
如要進一步瞭解 IAP 聲明,請參閱「驗證 JWT 酬載」。
IAP 聲明的效期為 10 分鐘,且無法撤銷。
SAML 聲明
安全宣告標記語言 (SAML) 聲明會驗證受管理的使用者帳戶,並授權他們存取自訂 SAML 應用程式。SAML 聲明由 Cloud Identity 發布及簽署,只能用於驗證受管理的使用者帳戶。
與使用全域金鑰簽署的 ID 權杖不同,SAML 聲明是使用 Cloud Identity 或 Google Workspace 帳戶專屬的金鑰簽署。
解碼後的 SAML 回應判斷結果如下所示:
<saml2:Assertion
xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
ID="..."
IssueInstant="2025-04-23T22:47:20.881Z"
Version="2.0">
<saml2:Issuer>
https://accounts.google.com/o/saml2?idpid=C0123456789
</saml2:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
<saml2:Subject>
<saml2:NameID
Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">
user@example.com
</saml2:NameID>
<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml2:SubjectConfirmationData
NotOnOrAfter="2025-04-23T22:52:20.881Z"
Recipient="https://app.example.com/"/>
</saml2:SubjectConfirmation>
</saml2:Subject>
<saml2:Conditions
NotBefore="2025-04-23T22:42:20.881Z"
NotOnOrAfter="2025-04-23T22:52:20.881Z">
<saml2:AudienceRestriction>
<saml2:Audience>example-app</saml2:Audience>
</saml2:AudienceRestriction>
</saml2:Conditions>
<saml2:AuthnStatement
AuthnInstant="2025-04-23T22:46:44.000Z"
SessionIndex="...">
<saml2:AuthnContext>
<saml2:AuthnContextClassRef>
urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified
</saml2:AuthnContextClassRef>
</saml2:AuthnContext>
</saml2:AuthnStatement>
</saml2:Assertion>
SAML 判斷包含下列欄位:
欄位 | 名稱 | 說明 |
---|---|---|
Audience |
目標對象 | SAML 應用程式的實體 ID。 |
Issuer |
核發單位 | 權杖的簽發者,特定於 Cloud Identity 或 Google Workspace 帳戶。 |
NameID |
主旨 | 已驗證的主體。識別碼的格式取決於 SAML 應用程式的設定。 |
SAML 聲明中包含的確切屬性集取決於 SAML 應用程式的設定。
SAML 聲明的效期為 10 分鐘,且無法撤銷。