リクエストを認証する

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

Cloud de Confiance by S3NS 環境での認証

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

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

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

Cloud de Confiance by S3NS 以外の環境での認証

非Cloud de Confiance by S3NS 環境で認証を行うには、次の 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. Cloud de Confiance by S3NS Shell の組み込み認証情報。
  5. Google Compute Engine の組み込みサービス アカウント認証情報。

API キーによる認証

一部の Cloud de Confiance by S3NS 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;
  }