对您的请求进行身份验证

Java 版 Cloud 客户端库使用适用于 Java 的 Google Auth 库对请求进行身份验证。此库支持多种身份验证类型。 如需了解详情,请参阅项目的 README.mdjavadoc

Google Cloud 环境中的身份验证

从 Google Cloud 环境(例如 Compute Engine、Google Kubernetes Engine 或 App Engine)中使用 Google Cloud 库时,您无需执行额外的身份验证步骤。

不含额外身份验证的调用示例:

Storage storage = StorageOptions.getDefaultInstance().getService();

非Google Cloud 环境中的身份验证

如需在非Google Cloud 环境中进行身份验证,有三种常见选项:

  1. (推荐)使用服务账号。
  2. 在本地测试环境中使用 Google Cloud SDK。
  3. 使用现有的 OAuth2 访问令牌。

使用服务账号

  1. 生成 JSON 服务账号密钥

  2. 下载密钥后,您必须执行以下某项操作:

    • 将环境变量 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() 从环境中检测凭据。此方法按以下顺序在以下位置搜索应用默认凭据:

  1. GOOGLE_APPLICATION_CREDENTIALS 环境变量指向的凭据文件。
  2. Google Cloud SDK gcloud auth application-default login 命令提供的凭据。
  3. Google App Engine 的内置凭据。
  4. Google Cloud Shell 的内置凭据。
  5. 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;
  }