本页面介绍了如何使用客户端库和应用默认凭据访问 Google API。
通过客户端库,您可以更轻松地使用支持的语言访问 Google Cloud API。您可以直接通过向服务器发出原始请求来使用 Google Cloud API,但客户端库可提供简化,从而显著减少您需要编写的代码量。这对于身份验证尤其如此,因为客户端库支持应用默认凭据 (ADC)。
如果您想使用 API 密钥,则无需使用 ADC。如需了解详情,请参阅将 API 密钥与客户端库搭配使用。
将应用默认凭据与客户端库搭配使用
如需使用应用默认凭据对应用进行身份验证,您必须先为应用运行的环境设置 ADC。使用客户端库创建客户端时,客户端库会自动检查和使用您提供给 ADC 的凭据,从而向代码使用的 API 进行身份验证。您的应用无需明确对令牌进行身份验证或管理;这些要求由身份验证库自动管理。
对于本地开发环境,您可以使用 gcloud CLI 通过用户凭据或服务账号模拟来设置 ADC。对于生产环境,您可以通过关联服务账号来设置 ADC。
示例客户端创建
以下代码示例为 Cloud Storage 服务创建客户端。您的代码可能需要不同的客户端;这些示例仅用于展示如何在无需任何代码来明确进行身份验证的情况下创建客户端并使用它。
您必须先完成以下步骤,然后才能运行后续示例:
Go
Java
Node.js
PHP
Python
Ruby
使用外部来源的凭据配置时的安全要求
通常,您可以使用 gcloud CLI 命令或 Google Cloud 控制台生成凭据配置。例如,您可以使用 gcloud CLI 生成本地 ADC 文件或登录配置文件。同样,您可以使用 Google Cloud 控制台创建和下载服务账号密钥。
不过,在某些用例中,凭据配置是由外部实体提供给您的;这些凭据配置旨在用于向 Google API 进行身份验证。
某些类型的凭据配置包含端点和文件路径,身份验证库会使用这些端点和文件路径来获取令牌。接受来自外部来源的凭据配置时,您必须先验证配置,然后才能使用该配置。如果您不验证配置,恶意攻击者可能会使用凭据破坏您的系统和数据。
验证来自外部来源的凭据配置
您需要如何验证外部凭据取决于您的应用接受哪些类型的凭据。
验证服务账号密钥
如果您的应用仅接受服务账号密钥,请使用专门针对服务账号密钥的凭据加载器,如以下示例所示。类型专用凭据加载器仅解析服务账号密钥中存在的字段,这些字段不会泄露任何漏洞。
C#
var saCredential = ServiceAccountCredential.FromServiceAccountData(stream);
C++
auto cred = google::cloud::MakeServiceAccountCredentials(json)
Java
ServiceAccountCredentials credentials =
ServiceAccountCredentials.fromJson(json, new HttpTransportFactory());
Node.js
const keys = JSON.parse(json_input)
const authClient = JWT.fromJSON(keys);
PHP
cred = new Google\Auth\Credentials\ServiceAccountCredentials($scope, $jsonKey);
Python
cred = service_account.Credentials.from_service_account_info(json_data)
Ruby
creds = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: json_stream)
如果您无法使用特定于类型的凭据加载器,请通过确认 type
字段的值为 service_account
来验证凭据。如果 type
字段的值是任何其他值,请勿使用服务账号密钥。
验证其他凭据配置
如果您的应用除了服务账号密钥之外还接受任何类型的凭据,则必须执行额外的验证。其他类型的凭据配置示例包括 ADC 凭据文件、工作负载身份联合凭据文件或 Workforce Identity Federation 登录配置文件。
下表列出了您需要验证的字段(如果您的凭据中包含这些字段)。并非所有凭据配置都包含所有这些字段。
字段 | 用途 | 预期值 |
---|---|---|
service_account_impersonation_url |
身份验证库使用此字段访问端点,以便为要被冒充的服务账号生成访问令牌。 | https://iamcredentials.googleapis.com.com/v1/projects/-/serviceAccounts/service account email:generateAccessToken |
token_url |
身份验证库会向此端点发送外部令牌,以将其交换为联合访问令牌。 | https://sts.googleapis.com.com/v1/token |
credential_source.file |
身份验证库会从此字段指定的位置读取文件中的外部令牌,并将其发送到 token_url 端点。
|
包含外部令牌的文件的路径。您应该能认出此路径。 |
credential_source.url |
用于返回外部令牌的端点。身份验证库会向此网址发送请求,并将响应发送到 token_url 端点。
|
以下任一项:
|
credential_source.executable.command |
如果 GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES 环境变量设置为 1 ,身份验证库会运行此命令或可执行文件。
|
用于返回外部令牌的可执行文件或命令。 您应该认识到此命令并验证其安全性。 |
credential_source.aws.url |
身份验证库会向此网址发出请求,以检索 AWS 安全令牌。 |
以下任一确切值:
|
credential_source.aws.region_url |
身份验证库会向此网址发出请求,以检索有效的 AWS 区域。 |
以下任一确切值:
|
credential_source.aws.imdsv2_session_token_url |
身份验证库会向此网址发出请求,以检索 AWS 会话令牌。 |
以下任一确切值:
|