リクエストを認証する

Java 用 Cloud クライアント ライブラリは、 Java 用 Google 認証ライブラリ を使用してリクエストを認証します。このライブラリは、複数の認証タイプをサポートしています。 詳細については、プロジェクトの README.mdjavadocをご覧ください。

環境での認証 Google Cloud

環境( Compute Engine、Google Kubernetes Engine、App Engine など)から Google Cloud ライブラリを使用する場合、追加の認証手順を行う必要はありません。 Google Cloud

追加の認証なしの呼び出しの例:

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

非Google Cloud 環境での認証

非Google Cloud 環境で認証するには、次の 3 つの一般的な 方法があります。

  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 シェルの組み込み認証情報。
  5. Google Compute Engine の組み込みサービス アカウント認証情報。

API キーを使用した認証

一部の Google Cloud API は、API キーを使用した認証をサポートしています。

Java 用 Cloud クライアント ライブラリで API キーを使用するには、関連するサービス クライアントの 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;
  }