このページでは、Cloud Endpoints Frameworks を使用して API でクライアント アプリケーションからのユーザー認証をサポートする方法について説明します。現在サポートされているクライアントは、Android クライアントと JavaScript クライアントです。
Endpoints Frameworks では、以下のいずれかの方式を使用するクライアント アプリケーションからのユーザー認証をサポートしています。
どの認証方法を使用する場合でも、適切な認証情報かどうかを確認する各 API メソッドで、以下のセクションの説明に従って有効な User かどうかを確認する必要があります。
前提条件
すでに以下を行っていることを前提としています。
- Google Cloudプロジェクトを作成済みであること。 
Firebase Authentication による認証
Firebase Authentication を使用するクライアントからの呼び出しをサポートするには:
- まだ作成していない場合は、プロジェクトを作成します。Firebase プロジェクトは、Firebase のサービスを使用するコンソール プロジェクトです。 Google Cloud 詳細については、Firebase プロジェクトとはと Firebase のドキュメントをご覧ください。 
- @Apiまたはメソッドのアノテーションに以下を追加します。- アノテーションに authenticatorsパラメータを追加して、その値を{EspAuthenticator.class}に設定します。
- @ApiIssuerを含む- issuersパラメータを追加します。
- Firebase と実際のプロジェクト ID に設定した @ApiIssuerAudienceを含むissuerAudiencesパラメータを追加します。
 - 次に例を示します。 - @Api( name = "YOUR_API_NAME", version = "VERSION_NUMBER", authenticators = {EspAuthenticator.class}, issuers = { @ApiIssuer( name = "firebase", issuer = "https://securetoken.google.com/YOUR_PROJECT_ID", jwksUri = "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com") }, issuerAudiences = { @ApiIssuerAudience(name = "firebase", audiences = "YOUR_PROJECT_ID") })- YOUR_API_NAMEは、API の名前に置き換えます。
- VERSION_NUMBERは、実際の API バージョンで置き換えます(例:- v1)。
- YOUR_PROJECT_IDは両方とも、実際の Firebase プロジェクト ID で置き換えます。
 
- アノテーションに 
- API の実装コードに - Usersをインポートします。- import com.google.api.server.spi.auth.common.User;
- 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 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; }
- 新しいクライアントを追加するときは必ず、API を再デプロイしてください。 
クライアントに Firebase 認証を追加する
コードに Firebase Authentication を追加する方法については、Firebase のドキュメントをご覧ください。クライアントに Google Cloud プロジェクトが関連付けられていて、上記のセクションに示されているように、そのプロジェクト ID が API の Firebase issuer の構成に含まれている必要があります。
Auth0 による認証
Auth0 を使用するクライアントからの呼び出しをサポートするには:
- @Apiまたはメソッドのアノテーションに以下を追加します。- アノテーションに authenticatorsパラメータを追加して、その値を{EspAuthenticator.class}に設定します。
- Auth0 に設定した @ApiIssuerを含むissuersパラメータを追加します。
- Auth0 と実際の Auth0 クライアント ID に設定した @ApiIssuerAudienceを含むissuerAudiencesパラメータを追加します。
 - 次に例を示します。 - @Api( name = "YOUR_API_NAME", version = "VERSION_NUMBER", authenticators = {EspAuthenticator.class}, issuers = { @ApiIssuer( name = "auth0", issuer = "https://YOUR_ACCOUNT_NAME.auth0.com/", jwksUri = "https://YOUR_ACCOUNT_NAME.auth0.com/.well-known/jwks.json") }, issuerAudiences = { @ApiIssuerAudience(name = "auth0", audiences = "AUTH0_CLIENT_ID") })- YOUR_API_NAMEは、API の名前に置き換えます。
- VERSION_NUMBERは、実際の API バージョンで置き換えます(例:- v1)。
- YOUR_ACCOUNT_NAMEは、クライアントに使用する Auth0 アカウント名で置き換えます。
- AUTH0_CLIENT_IDは、クライアントに使用する ID で置き換えます。
 
- アノテーションに 
- API の実装コードに - Usersをインポートします。- import com.google.api.server.spi.auth.common.User;
- 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 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; }
- 新しいクライアントを追加するときは必ず、API を再デプロイしてください。 
クライアントに Auth0 認証を追加する
コードに Auth0 認証を追加する方法については、Auth0 のドキュメントをご覧ください。クライアントが API における Auth0 issuer の構成に含まれている必要があります。
Google ID トークンによる認証
Google ID トークンを使用して認証するクライアントからの呼び出しをサポートするには:
- クライアント アプリケーションごとに OAuth 2 クライアント ID を取得します。このクライアント ID は、クライアント アプリケーションのオーナーがコンソールで生成する必要があります。 Google Cloud 手順については、クライアント ID の作成をご覧ください。 
- @Apiアノテーションに、アクセス権を付与する各クライアント アプリのクライアント ID を含む- clientIdsエントリと、各 Android クライアントの- audiencesエントリを追加します。- 次に例を示します。 - @Api( name = "YOUR_API_NAME", version = "VERSION_NUMBER", clientIds = {"YOUR_CLIENT_ID"}, audiences = {"YOUR_CLIENT_ID"} )- YOUR_API_NAMEは、API の名前に置き換えます。
- VERSION_NUMBERは、実際の API バージョンで置き換えます(例:- v1)。
- YOUR_CLIENT_IDは、クライアント アプリケーションのプロジェクト内で生成された OAuth 2 クライアント ID で置き換えます。
 
- API の実装コードに - Usersをインポートします。- import com.google.api.server.spi.auth.common.User;
- 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 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; }
- 新しいクライアントを追加するときは必ず、API を再デプロイしてください。 
クライアントに Google ID トークン認証を追加する
クライアントに認証コードを追加する方法については、以下を参照してください。
クライアントの JWT を送信する
クライアントで JWT を使用して認証済みリクエストを API に送信する場合は、JWT を HTTP リクエストの Authorization ヘッダーに含める必要があります。JWT には次の必須のクレームが含まれている必要があります。
- iss
- sub
- aud
- iat
- exp
次のステップ
ユーザー認証の背景情報や、ユーザー認証と API キー承認の違いについては、API キーを使用する理由と条件をご覧ください。