サービス アカウントによる認証

前提条件

すでに以下を行っていることを前提としています。

認証を構成する

サービス アカウントで認証するには:

  1. @Api またはメソッドのアノテーションに以下を追加します。

    • アノテーションに authenticators パラメータを追加して、その値を {EspAuthenticator.class} に設定します。
    • @ApiIssuer を含む issuers パラメータを追加します。
    • サービス アカウントの発行元および対象に設定した @ApiIssuerAudience を含む issuerAudiences パラメータを追加します。

    例:

    @Api(
        name = "echo",
        version = "v1",
        authenticators = {EspAuthenticator.class},
        issuers = {
            @ApiIssuer(
                name = "serviceAccount",
                issuer = "YOUR_SERVICE_ACCOUNT_EMAIL",
                jwksUri = "https://www.googleapis.com/robot/v1/metadata/x509/YOUR_SERVICE_ACCOUNT_EMAIL")
        },
        issuerAudiences = {
            @ApiIssuerAudience(name = "serviceAccount", audiences = "YOUR_AUDIENCE")
        })
    
    • echo は、API の名前に置き換えます。
    • v1 は、API のバージョンに置き換えます。
    • YOUR_SERVICE_ACCOUNT_EMAIL は、サービス アカウントのメールアドレスに置き換えます。
    • YOUR_AUDIENCE は、呼び出し側のサービスが送信する aud フィールドの値に置き換えます。
  2. API の実装コードに Users をインポートします。

    import com.google.api.server.spi.auth.common.User;
    
  3. 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 API メソッドで、有効な User が存在するかどうかを確認して、存在しない場合は例外をスローします。

    @ApiMethod(httpMethod = ApiMethod.HttpMethod.GET)
    public Email getUserEmail(User user) throws UnauthorizedException {
      if (user == null) {
        throw new UnauthorizedException("Invalid credentials");
      }
    
      Email response = new Email();
      response.setEmail(user.getEmail());
      return response;
    }
    
  4. API をデプロイします。新しいクライアントを追加するたびに API を再デプロイする必要があります。