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 的语言客户端的实例化示例:
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;
}