リクエストを認証する

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

Google Cloud 環境での認証

Google Cloud 環境(Compute Engine、Google Kubernetes Engine、App Engine など)から 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 Shell の組み込み認証情報。
  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 を使用した言語クライアントのインスタンス化の例:

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