驗證要求

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 透過 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;
  }