本页面介绍了如何使用客户端库访问 Google API。
通过客户端库,您可以更轻松地使用支持的语言访问 Google Cloud API。您可以直接通过向服务器发出原始请求来使用 Google Cloud API,但客户端库可提供简化,从而显著减少您需要编写的代码量。这对于身份验证尤其如此,因为客户端库支持应用默认凭据 (ADC)。
如果您接受来自外部来源(例如客户)的凭据配置(JSON、文件或数据流),请查看使用来自外部来源的凭据配置时应满足的安全要求。
将应用默认凭据与客户端库搭配使用
如需使用应用默认凭据对应用进行身份验证,您必须先为应用运行的环境设置 ADC。使用客户端库创建客户端时,客户端库会自动检查和使用您提供给 ADC 的凭据,从而向代码使用的 API 进行身份验证。您的应用无需明确对令牌进行身份验证或管理;这些要求由身份验证库自动管理。
对于本地开发环境,您可以使用 gcloud CLI 通过用户凭据或服务账号模拟来设置 ADC。对于生产环境,您可以通过关联服务账号来设置 ADC。
示例客户端创建
以下代码示例为 Cloud Storage 服务创建客户端。您的代码可能需要不同的客户端;这些示例仅用于展示如何在无需任何代码来明确进行身份验证的情况下创建客户端并使用它。
您必须先完成以下步骤,然后才能运行后续示例:
Go
Java
Node.js
PHP
Python
Ruby
将 API 密钥与客户端库搭配使用
您只能将 API 密钥与接受 API 密钥的 API 的客户端库搭配使用。此外,API 密钥不得设置任何会阻止其用于该 API 的 API 限制。
如需详细了解在快速模式下创建的 API 密钥,请参阅 Google Cloud 快速模式常见问题解答。
此示例使用接受 API 密钥的 Cloud Natural Language API 来演示如何向库提供 API 密钥。
C#
如需运行此示例,您必须安装 Natural Language 客户端库。
C++
如需运行此示例,您必须安装 Natural Language 客户端库。
Go
如需运行此示例,您必须安装 Natural Language 客户端库。
Node.js
如需运行此示例,您必须安装 Natural Language 客户端库。
Python
如需运行此示例,您必须安装 Natural Language 客户端库。
当您在应用中使用 API 密钥时,请确保其在存储和传输期间均安全无虞。公开泄露 API 密钥可能会导致您的账号产生意外费用。如需了解详情,请参阅管理 API 密钥的最佳实践。
使用外部来源的凭据配置时的安全要求
通常,您可以使用 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 凭据文件、工作负载身份联合凭据文件或员工身份联合登录配置文件。
下表列出了您需要验证的字段(如果您的凭据中包含这些字段)。并非所有凭据配置都包含所有这些字段。
字段 | 用途 | 预期值 |
---|---|---|
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 会话令牌。 |
以下任一确切值:
|