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