Java 的開源身份驗證客戶端程式庫。
此專案由 3 個工件組成:
目錄:
快速入門
Google-auth-library-oauth2-http
谷歌身份驗證庫憑證
google-auth-library-appengine
CI狀態
貢獻
執照
如果您使用 Maven,請將其新增至您的 pom.xml 檔案(請注意,您可以將google-auth-library-oauth2-http
取代為google-auth-library-credentials
和google-auth-library-appengine
中的任何一個,取決於您的應用程式需求):
< dependency >
< groupId >com.google.auth groupId >
< artifactId >google-auth-library-oauth2-http artifactId >
< version >1.19.0 version >
dependency >
如果您使用 Gradle,請將其新增至您的依賴項中
implementation ' com.google.auth:google-auth-library-oauth2-http:1.19.0 '
如果您使用 SBT,請將其新增至您的依賴項中
libraryDependencies + = " com.google.auth " % " google-auth-library-oauth2-http " % " 1.19.0 "
該程式庫提供了 Java 應用程式預設憑證的實作。應用程式預設憑證提供了一種獲取授權憑證以用於呼叫 Google API 的簡單方法。
它們最適合呼叫需要獨立於使用者的應用程式具有相同身分和授權等級的情況。這是授權呼叫 Cloud API 的推薦方法,特別是當您建立使用 Google Cloud Platform 的應用程式時。
應用程式預設憑證也支援工作負載身分聯合,以便從非 Google Cloud 平台存取 Google Cloud 資源,包括 Amazon Web Services (AWS)、Microsoft Azure 或任何支援 OpenID Connect (OIDC) 的身分提供者。建議在非 Google Cloud 環境中使用工作負載身分聯合,因為它無需在本機下載、管理和儲存服務帳號私鑰,請參閱:工作負載身分聯合。
若要取得應用程式預設憑證,請使用GoogleCredentials.getApplicationDefault()
或GoogleCredentials.getApplicationDefault(HttpTransportFactory)
。這些方法傳回應用程式預設憑證,用於識別和授權整個應用程式。 (按順序)搜尋以下內容以查找應用程式預設憑證:
GOOGLE_APPLICATION_CREDENTIALS
環境變數所指向的憑證文件gcloud auth application-default login
指令提供的憑證NO_GCE_CHECK=true
跳過此檢查GCE_METADATA_HOST=
自訂GCE元資料伺服器位址若要從服務帳戶 JSON 金鑰取得憑證,請使用GoogleCredentials.fromStream(InputStream)
或GoogleCredentials.fromStream(InputStream, HttpTransportFactory)
。請注意,在存取令牌可用之前必須刷新憑證。
GoogleCredentials credentials = GoogleCredentials . fromStream ( new FileInputStream ( "/path/to/credentials.json" ));
credentials . refreshIfExpired ();
AccessToken token = credentials . getAccessToken ();
// OR
AccessToken token = credentials . refreshAccessToken ();
允許頒發給使用者或服務帳戶的憑證來冒充另一個使用者或服務帳戶。使用 ImpersonatedCredentials 的來源專案必須啟用「IAMCredentials」API。此外,目標服務帳戶必須授予原始委託人「服務帳戶令牌創建者」IAM 角色。
String credPath = "/path/to/svc_account.json" ;
ServiceAccountCredentials sourceCredentials = ServiceAccountCredentials
. fromStream ( new FileInputStream ( credPath ));
sourceCredentials = ( ServiceAccountCredentials ) sourceCredentials
. createScoped ( Arrays . asList ( "https://www.googleapis.com/auth/iam" ));
ImpersonatedCredentials targetCredentials = ImpersonatedCredentials . create ( sourceCredentials ,
"[email protected]" , null ,
Arrays . asList ( "https://www.googleapis.com/auth/devstorage.read_only" ), 300 );
Storage storage_service = StorageOptions . newBuilder (). setProjectId ( "project-id" )
. setCredentials ( targetCredentials ). build (). getService ();
for ( Bucket b : storage_service . list (). iterateAll ())
System . out . println ( b );
使用工作負載身分聯合,您的應用程式可以從 Amazon Web Services (AWS)、Microsoft Azure 或任何支援 OpenID Connect (OIDC) 的身分提供者存取 Google Cloud 資源。
傳統上,在 Google Cloud 外部運行的應用程式使用服務帳號金鑰來存取 Google Cloud 資源。使用身分聯合,您的工作負載可以模擬服務帳戶。這使得外部工作負載可以直接存取 Google Cloud 資源,從而消除與服務帳號金鑰相關的維護和安全負擔。
為了從 Amazon Web Services (AWS) 存取 Google Cloud 資源,需要滿足以下要求:
請依照如何從 AWS 配置工作負載身分聯合的詳細說明進行操作。
配置AWS提供者以模擬服務帳戶後,需要產生憑證設定檔。與服務帳戶憑證檔案不同,產生的憑證設定檔包含非敏感元數據,用於指示庫如何檢索外部主題令牌並將其交換為服務帳戶存取權杖。可以使用 gcloud CLI 產生設定檔。
若要產生 AWS 工作負載身分配置,請執行下列命令:
# Generate an AWS configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
其中需要替換以下變數:
$PROJECT_NUMBER
:Google Cloud 專案編號。$POOL_ID
:工作負載身分池 ID。$AWS_PROVIDER_ID
:AWS 提供者 ID。$SERVICE_ACCOUNT_EMAIL
:要模擬的服務帳戶的電子郵件。這會在指定的輸出檔中產生設定檔。
如果您使用的是 AWS IMDSv2,則需要將附加標誌--enable-imdsv2
新增至gcloud iam workload-identity-pools create-cred-config
指令中:
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--enable-imdsv2
現在您可以使用 Auth 函式庫從 AWS 呼叫 Google Cloud 資源。
為了從 Microsoft Azure 存取 Google Cloud 資源,需要滿足以下要求:
請遵循如何從 Microsoft Azure 設定工作負載身分聯合的詳細說明。
配置 Azure 提供者以模擬服務帳戶後,需要產生憑證設定檔。與服務帳戶憑證檔案不同,產生的憑證設定檔包含非敏感元數據,用於指示庫如何檢索外部主題令牌並將其交換為服務帳戶存取權杖。可以使用 gcloud CLI 產生設定檔。
若要產生 Azure 工作負載身分配置,請執行下列命令:
# Generate an Azure configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AZURE_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--azure
--output-file /path/to/generated/config.json
其中需要替換以下變數:
$PROJECT_NUMBER
:Google Cloud 專案編號。$POOL_ID
:工作負載身分池 ID。$AZURE_PROVIDER_ID
:Azure 提供者 ID。$SERVICE_ACCOUNT_EMAIL
:要模擬的服務帳戶的電子郵件。這會在指定的輸出檔中產生設定檔。
現在您可以使用 Auth 程式庫從 Azure 呼叫 Google Cloud 資源。
為了從支援 OpenID Connect (OIDC) 的身份提供者存取 Google Cloud 資源,需要滿足以下要求:
請遵循如何從 OIDC 身分提供者配置工作負載身分聯合的詳細說明。
配置 OIDC 提供者以模擬服務帳戶後,需要產生憑證設定檔。與服務帳戶憑證檔案不同,產生的憑證設定檔包含非敏感元數據,用於指示庫如何檢索外部主題令牌並將其交換為服務帳戶存取權杖。可以使用 gcloud CLI 產生設定檔。
對於 OIDC 提供程序,Auth 庫可以從本機文件位置(源自文件的憑證)或本機伺服器(源自 URL 的憑證)檢索 OIDC 令牌。
檔案來源憑證對於檔案來源憑證,後台進程需要在過期之前使用新的 OIDC 令牌不斷刷新檔案位置。對於具有一小時生命週期的令牌,需要每小時在檔案中更新一次令牌。令牌可以直接儲存為純文字或 JSON 格式。
若要產生文件來源的 OIDC 配置,請執行下列命令:
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-file $PATH_TO_OIDC_ID_TOKEN
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
其中需要替換以下變數:
$PROJECT_NUMBER
:Google Cloud 專案編號。$POOL_ID
:工作負載身分池 ID。$OIDC_PROVIDER_ID
:OIDC 提供者 ID。$SERVICE_ACCOUNT_EMAIL
:要模擬的服務帳戶的電子郵件。$PATH_TO_OIDC_ID_TOKEN
:用於檢索 OIDC 令牌的檔案路徑。這會在指定的輸出檔中產生設定檔。
來自 URL 的憑證對於來自 URL 的憑證,本機伺服器需要託管 GET 端點以傳回 OIDC 代幣。回應可以是純文字或 JSON。也可以指定其他必需的請求標頭。
若要產生源自 URL 的 OIDC 工作負載身分配置,請執行下列命令:
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-url $URL_TO_GET_OIDC_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
其中需要替換以下變數:
$PROJECT_NUMBER
:Google Cloud 專案編號。$POOL_ID
:工作負載身分池 ID。$OIDC_PROVIDER_ID
:OIDC 提供者 ID。$SERVICE_ACCOUNT_EMAIL
:要模擬的服務帳戶的電子郵件。$URL_TO_GET_OIDC_TOKEN
:呼叫以檢索 OIDC 令牌的本機伺服器端點的 URL。$HEADER_KEY
和$HEADER_VALUE
:將 GET 請求傳遞到$URL_TO_GET_OIDC_TOKEN
的附加標頭鍵/值對,例如Metadata-Flavor=Google
。現在您可以使用 Auth 程式庫從 OIDC 提供者呼叫 Google Cloud 資源。
源自可執行檔的憑證對於源自可執行檔的憑證,本機可執行檔用於擷取第 3 方令牌。可執行檔必須處理向 stdout 提供有效、未過期的 OIDC ID 令牌或 JSON 格式的 SAML 斷言。
若要使用源自可執行文件的憑證,必須將GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
環境變數設為1
。
若要產生源自可執行檔的工作負載身分配置,請執行下列命令:
# Generate a configuration file for executable-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $PROVIDER_ID
--service-account= $SERVICE_ACCOUNT_EMAIL
--subject-token-type= $SUBJECT_TOKEN_TYPE
# The absolute path for the program, including arguments.
# e.g. --executable-command="/path/to/command --foo=bar"
--executable-command= $EXECUTABLE_COMMAND
# Optional argument for the executable timeout. Defaults to 30s.
# --executable-timeout-millis=$EXECUTABLE_TIMEOUT
# Optional argument for the absolute path to the executable output file.
# See below on how this argument impacts the library behaviour.
# --executable-output-file=$EXECUTABLE_OUTPUT_FILE
--output-file /path/to/generated/config.json
其中需要替換以下變數:
$PROJECT_NUMBER
:Google Cloud 專案編號。$POOL_ID
:工作負載身分池 ID。$PROVIDER_ID
:OIDC 或 SAML 提供者 ID。$SERVICE_ACCOUNT_EMAIL
:要模擬的服務帳戶的電子郵件。$SUBJECT_TOKEN_TYPE
:主題令牌類型。$EXECUTABLE_COMMAND
:要執行的完整命令,包括參數。必須是程式的絕對路徑。 --executable-timeout-millis
標誌是可選的。這是身份驗證庫等待可執行檔完成的持續時間(以毫秒為單位)。未提供時預設為 30 秒。允許的最大值為 2 分鐘。最短時間為 5 秒。
--executable-output-file
標誌是可選的。如果提供,檔案路徑必須指向可執行檔產生的 3PI 憑證回應。這對於快取憑證很有用。透過指定此路徑,Auth 庫將在運行可執行檔之前先檢查其是否存在。透過快取對此檔案的可執行 JSON 回應,它可以提高效能,因為它避免了在輸出檔案中快取的憑證過期之前運行可執行檔的需要。可執行檔必須處理對此文件的寫入 - 身份驗證庫將僅嘗試從此位置讀取。文件中內容的格式應與下面所示的可執行檔所需的 JSON 格式相符。
為了檢索第 3 方令牌,程式庫將使用指定的命令呼叫可執行檔。可執行檔的輸出必須遵循下面指定的回應格式。它必須將響應輸出到標準輸出。
成功的可執行 OIDC 回應範例:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:id_token " ,
"id_token" : " HEADER.PAYLOAD.SIGNATURE " ,
"expiration_time" : 1620499962
}
成功的可執行 SAML 回應範例:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:saml2 " ,
"saml_response" : " ... " ,
"expiration_time" : 1620499962
}
可執行錯誤回應範例:
{
"version" : 1 ,
"success" : false ,
"code" : " 401 " ,
"message" : " Caller not authorized. "
}
這些都是錯誤回應的必填欄位。庫將使用程式碼和訊息欄位作為引發異常的一部分。
對於成功的回應,僅當在憑證配置中指定輸出檔案時才需要expiration_time
欄位。
回應格式欄位摘要:
version
:JSON 輸出的版本。目前僅支援版本 1。success
:為 true 時,回應必須包含第 3 方令牌和令牌類型。如果在憑證配置中指定了輸出文件,則回應也必須包含expiration_time 欄位。可執行檔也必須以退出代碼 0 退出。token_type
:第 3 方主題令牌類型。必須是urn:ietf:params:oauth:token-type:jwt 、 urn:ietf:params:oauth:token-type:id_token或urn:ietf:params:oauth:token-type:saml2 。id_token
:第 3 方 OIDC 令牌。saml_response
:第 3 方 SAML 回應。expiration_time
:第 3 方主題令牌過期時間(以秒為單位)(Unix 紀元時間)。code
:錯誤代碼字串。message
:錯誤訊息。所有回應類型都必須包含version
和success
欄位。
token_type
以及id_token
或saml_response
之一。如果在憑證配置中指定了輸出文件,則expiration_time
欄位也必須存在。code
和message
欄位。執行可執行檔時,該庫將填入以下環境變數:
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
:憑證配置中的受眾欄位。始終存在。GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
:此預期的主題令牌類型。始終存在。GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL
:服務帳戶電子郵件。僅當使用服務帳戶模擬時才出現。GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
:憑證配置的輸出檔位置。僅在憑證配置中指定時才存在。可執行檔可以使用這些環境變數來避免對這些值進行硬編碼。
強烈建議採取以下安全措施:
鑑於使用可執行來源憑證的複雜性,建議使用現有支援的機制(文件來源/URL 來源)來提供第 3 方憑證,除非它們不符合您的特定要求。
現在您可以使用 Auth 程式庫從 OIDC 或 SAML 提供者呼叫 Google Cloud 資源。
在建置 IdentityPoolCredentials 時可以使用 IdentityPoolSubjectTokenSupplier 的自訂實作來提供可交換 GCP 存取權杖的主題令牌。當 GCP 憑證呼叫時,供應商必須傳回有效的、未過期的主體令牌。
IdentityPoolCredentials 不會快取傳回的令牌,因此應在令牌提供者中實現快取邏輯,以防止對相同主題令牌的多個請求。
import java . io . IOException ;
public class CustomTokenSupplier implements IdentityPoolSubjectTokenSupplier {
@ Override
public String getSubjectToken ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience and subject token type.
string audience = context . getAudience ();
string tokenType = context . getSubjectTokenType ();
try {
// Return a valid, unexpired token for the requested audience and token type.
// Note that IdentityPoolCredentials do not cache the subject token so
// any caching logic needs to be implemented in the token supplier.
return retrieveToken ( audience , tokenType );
} catch ( Exception e ) {
// If token is unavailable, throw IOException.
throw new IOException ( e );
}
}
private String retrieveToken ( string tokenType , string audience ) {
// Retrieve a subject token of the requested type for the requested audience.
}
}
CustomTokenSupplier tokenSupplier = new CustomTokenSupplier ();
IdentityPoolCredentials identityPoolCredentials =
IdentityPoolCredentials . newBuilder ()
. setSubjectTokenSupplier ( tokenSupplier ) // Sets the token supplier.
. setAudience (...) // Sets the GCP audience.
. setSubjectTokenType ( SubjectTokenTypes . JWT ) // Sets the subject token type.
. build ();
受眾所在位置: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
其中需要替換以下變數:
$PROJECT_NUMBER
:Google Cloud 專案編號。$WORKLOAD_POOL_ID
:工作負載身分池 ID。$PROVIDER_ID
:提供者 ID。受眾、服務帳戶模擬 URL 和任何其他建構器欄位的值也可以透過使用 gcloud CLI 產生憑證設定檔來找到。
初始化 AwsCredentials 時可以提供 AwsSecurityCredentialsSupplier 的自訂實作。如果提供,AwsCredentials 實例將按照供應商的要求檢索 AWS 安全憑證以換取 GCP 存取權杖。當 GCP 憑證呼叫時,供應商必須傳回有效、未過期的 AWS 安全憑證。
AwsCredentials 不會快取傳回的 AWS 安全憑證或區域,因此應在供應商中實作快取邏輯,以防止對相同資源的多個要求。
class CustomAwsSupplier implements AwsSecurityCredentialsSupplier {
@ Override
AwsSecurityCredentials getAwsSecurityCredentials ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience.
string audience = context . getAudience ();
try {
// Return valid, unexpired AWS security credentials for the requested audience.
// Note that AwsCredentials do not cache the AWS security credentials so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsSecurityCredentials ( audience );
} catch ( Exception e ) {
// If credentials are unavailable, throw IOException.
throw new IOException ( e );
}
}
@ Override
String getRegion ( ExternalAccountSupplierContext context ) throws IOException {
try {
// Return a valid AWS region. i.e. "us-east-2".
// Note that AwsCredentials do not cache the region so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsRegion ();
} catch ( Exception e ) {
// If region is unavailable, throw IOException.
throw new IOException ( e );
}
}
private AwsSecurityCredentials retrieveAwsSecurityCredentials ( string audience ) {
// Retrieve Aws security credentials for the requested audience.
}
private String retrieveAwsRegion () {
// Retrieve current AWS region.
}
}
CustomAwsSupplier awsSupplier = new CustomAwsSupplier ();
AwsCredentials credentials = AwsCredentials . newBuilder ()
. setSubjectTokenType ( SubjectTokenTypes . AWS4 ) // Sets the subject token type.
. setAudience (...) // Sets the GCP audience.
. setAwsSecurityCredentialsSupplier ( supplier ) // Sets the supplier.
. build ();
受眾所在位置: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
其中需要替換以下變數:
$PROJECT_NUMBER
:Google Cloud 專案編號。$WORKLOAD_POOL_ID
:工作負載身分池 ID。$PROVIDER_ID
:提供者 ID。受眾、服務帳戶模擬 URL 和任何其他建構器欄位的值也可以透過使用 gcloud CLI 產生憑證設定檔來找到。
使用服務帳戶模擬建立具有工作負載身分聯合的憑證設定時,您可以提供選用參數來設定服務帳戶存取權杖生存期。
若要產生具有可配置令牌生命週期的配置,請執行下列命令(本範例使用 AWS 配置,但可以為所有工作負載身分聯合提供者配置令牌生命週期):
# Generate an AWS configuration file with configurable token lifetime.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--service-account-token-lifetime-seconds $TOKEN_LIFETIME
其中需要替換以下變數:
$PROJECT_NUMBER
:Google Cloud 專案編號。$POOL_ID
:工作負載身分池 ID。$AWS_PROVIDER_ID
:AWS 提供者 ID。$SERVICE_ACCOUNT_EMAIL
:要模擬的服務帳戶的電子郵件。$TOKEN_LIFETIME
:服務帳戶存取權杖所需的生命週期(以秒為單位)。 service-account-token-lifetime-seconds
標誌是可選的。如果未提供,則預設為一小時。允許的最小值為 600(10 分鐘),允許的最大值為 43200(12 小時)。如果需要大於一小時的生命週期,則必須將服務帳戶新增為強制執行constraints/iam.allowServiceAccountCredentialLifetimeExtension
約束的組織策略中的允許值。
請注意,配置較短的生命週期(例如 10 分鐘)將導致庫每 10 分鐘啟動一次整個令牌交換流程,即使第 3 方令牌未過期,這也會呼叫第 3 方令牌提供者。
勞動力身分聯合可讓您使用外部身分提供者 (IdP) 對使用 IAM 的勞動力(一組用戶,例如員工、合作夥伴和承包商)進行身分驗證和授權,以便使用者可以存取 Google Cloud 服務。勞動力身分聯合擴展了 Google Cloud 的身份功能,以支援無同步、基於屬性的單一登入。
透過員工身分聯合,您的員工可以使用支援OpenID Connect (OIDC) 或SAML 2.0 的外部身分提供者(IdP)(例如Azure Active Directory (Azure AD)、Active Directory 聯合身分驗證服務(AD FS)、Okta)存取Google Cloud 資源,以及其他。
為了從支援 OpenID Connect (OIDC) 的身份提供者存取 Google Cloud 資源,需要滿足以下要求:
請遵循有關如何配置員工身分聯合的詳細說明。
配置 OIDC 或 SAML 2.0 提供者後,需要產生憑證設定檔。產生的憑證設定檔包含非敏感元數據,用於指示庫如何檢索外部主題令牌並將其交換為 GCP 存取權杖。可以使用 gcloud CLI 產生設定檔。
Auth 函式庫可以從本機檔案位置(源自檔案的憑證)、本機伺服器(源自 URL 的憑證)或透過呼叫執行檔(源自可執行的憑證)來擷取外部主題令牌。
檔案來源憑證對於檔案來源憑證,後台程序需要在過期之前使用新的主題令牌不斷刷新檔案位置。對於具有一小時生命週期的令牌,需要每小時在檔案中更新一次令牌。令牌可以直接儲存為純文字或 JSON 格式。
若要產生文件來源的 OIDC 配置,請執行下列命令:
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:id_token
--credential-source-file= $PATH_TO_OIDC_ID_TOKEN
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file=/path/to/generated/config.json
其中需要替換以下變數:
$WORKFORCE_POOL_ID
:勞動力池 ID。$PROVIDER_ID
:提供者 ID。$PATH_TO_OIDC_ID_TOKEN
:用於檢索 OIDC 令牌的檔案路徑。$WORKFORCE_POOL_USER_PROJECT
:與勞動力池使用者項目相關聯的項目編號。若要產生源自檔案的 SAML 配置,請執行下列命令:
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--credential-source-file= $PATH_TO_SAML_ASSERTION
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
其中需要替換以下變數:
$WORKFORCE_POOL_ID
:勞動力池 ID。$PROVIDER_ID
:提供者 ID。$PATH_TO_SAML_ASSERTION
:用於擷取 Base64 編碼的 SAML 斷言的檔案路徑。$WORKFORCE_POOL_USER_PROJECT
:與勞動力池使用者項目相關聯的項目編號。這些命令在指定的輸出檔中產生設定檔。
來自 URL 的憑證對於來自 URL 的憑證,本機伺服器需要託管 GET 端點以傳回 OIDC 代幣。回應可以是純文字或 JSON。也可以指定其他必需的請求標頭。
若要產生源自 URL 的 OIDC 員工身分配置,請執行下列命令:
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:id_token
--credential-source-url= $URL_TO_RETURN_OIDC_ID_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
其中需要替換以下變數:
$WORKFORCE_POOL_ID
:勞動力池 ID。$PROVIDER_ID
:提供者 ID。$URL_TO_RETURN_OIDC_ID_TOKEN
:本機伺服器端點的 URL。$HEADER_KEY
和$HEADER_VALUE
:將 GET 請求傳遞到$URL_TO_GET_OIDC_TOKEN
的附加標頭鍵/值對,例如Metadata-Flavor=Google
。$WORKFORCE_POOL_USER_PROJECT
:與勞動力池使用者項目相關聯的項目編號。若要產生源自 URL 的 SAML 配置,請執行下列命令:
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--credential-source-url= $URL_TO_GET_SAML_ASSERTION
--credential-source-headers