Java 版 Cloud 客户端库使用
Java 版 Google Auth 库
对请求进行身份验证。此库支持多种身份验证类型。
如需了解详情,请参阅项目的 README.md
和 javadoc。
环境中的身份验证 Google Cloud
从 Google Cloud 环境(例如 Compute Engine、Google Kubernetes Engine 或 App Engine)中使用 Google Cloud 库时,您无需执行 额外的身份验证步骤。
以下是不需要额外身份验证的调用示例:
Storage storage = StorageOptions.getDefaultInstance().getService();
非Google Cloud 环境中的身份验证
如需在非Google Cloud 环境中进行身份验证,有三种常见 选项:
- (推荐)使用服务帐号。
- 将 Google Cloud SDK 与本地测试环境搭配使用。
- 使用现有的 OAuth2 访问令牌。
使用服务帐号
下载密钥后,您必须执行以下操作之一:
- 将环境变量
GOOGLE_APPLICATION_CREDENTIALS定义为密钥的位置。 例如:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/key.json- 在构建服务选项时提供 JSON 凭据文件。例如,此
Storage对象具有与 Cloud Storage 数据交互所需的权限:
Storage storage = StorageOptions.newBuilder() .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("/path/to/my/key.json"))) .build() .getService();- 将环境变量
将 Google Cloud SDK 与本地测试环境搭配使用
如果您使用本地环境进行开发或测试,则可以使用 Google Cloud SDK。
使用 gcloud auth application-default login 创建应用默认凭证。Java 版 Cloud 客户端库会自动检测这些凭据。
使用现有的 OAuth2 访问令牌
如果您有 OAuth2 访问令牌,则可以使用它进行身份验证。如果您这样做,则访问令牌不会自动刷新:
Credentials credentials = GoogleCredentials.create(new AccessToken(accessToken, expirationTime));
Storage storage = StorageOptions.newBuilder()
.setCredentials(credentials)
.build()
.getService();
另一个示例:
Credentials credentials = GoogleCredentials.create(new AccessToken(accessToken, expirationTime));
CloudTasksSettings cloudTasksSettings = CloudTasksSettings.newBuilder()
.setCredentialProvider(FixedCredentialsProvider.create(credentials))
.build();
CloudTasksClient cloudTasksClient = CloudTasksClient.create(cloudTasksSettings);
应用默认凭据
如果您未提供凭据,Java 版 Cloud 客户端库将尝试使用 GoogleCredentials.getApplicationDefault() 从环境中检测凭据。
此方法会按以下顺序在以下位置搜索应用默认凭据:
GOOGLE_APPLICATION_CREDENTIALS环境变量指向的凭据文件。- Google Cloud SDK
gcloud auth application-default login命令提供的凭据。 - Google App Engine 的内置凭据。
- Google Cloud Shell 的内置凭据。
- Google Compute Engine 的内置服务帐号凭据。
使用 API 密钥进行身份验证
某些 Google Cloud API 支持使用 API 密钥进行身份验证。
如需将 API 密钥与 Java 版 Cloud 客户端库搭配使用,您必须为相关服务客户端手动设置 x-goog-api-key 标头。
例如,如需使用
Language service设置 API 密钥,请执行以下操作:
public LanguageServiceClient createGrpcClientWithApiKey(String apiKey) throws Exception {
// Manually set the API key using the header
Map<String, String> header = new HashMap<String, String>() { {put("x-goog-api-key", apiKey);}};
FixedHeaderProvider headerProvider = FixedHeaderProvider.create(header);
// Create the client
TransportChannelProvider transportChannelProvider = InstantiatingGrpcChannelProvider.newBuilder().setHeaderProvider(headerProvider).build();
LanguageServiceSettings settings = LanguageServiceSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
LanguageServiceClient client = LanguageServiceClient.create(settings);
return client;
}
以下是使用 REST 的 Language Client 的实例化示例:
public LanguageServiceClient createRestClientWithApiKey(String apiKey) throws Exception {
// Manually set the API key header
Map<String, String> header = new HashMap<String, String>() { {put("x-goog-api-key", apiKey);}};
FixedHeaderProvider headerProvider = FixedHeaderProvider.create(header);
// Create the client
TransportChannelProvider transportChannelProvider = InstantiatingHttpJsonChannelProvider.newBuilder().setHeaderProvider(headerProvider).build();
LanguageServiceSettings settings = LanguageServiceSettings.newBuilder().setTransportChannelProvider(transportChannelProvider).build();
LanguageServiceClient client = LanguageServiceClient.create(settings);
return client;
}