このページでは、Cloud Endpoints Frameworks を使用して API でクライアント アプリケーションからのユーザー認証をサポートする方法について説明します。現在サポートされているクライアントは、Android クライアントと JavaScript クライアントです。
Endpoints Frameworks では、以下のいずれかの方式を使用するクライアント アプリケーションからのユーザー認証をサポートしています。
どの認証方法を使用する場合でも、適切な認証情報かどうかを確認する各 API メソッドで、以下のセクションの説明に従って有効な User かどうかを確認する必要があります。
前提条件
すでに以下を行っていることを前提としています。
- Google Cloud プロジェクトを作成済みであること。 
- クライアントで JWT を使用して認証済みリクエストを API に送信する場合は、JWT を HTTP リクエストの Authorization ヘッダーに含める必要があります。JWT には次の必須のクレームが含まれている必要があります。
-  iss
-  sub
-  aud
-  iat
-  exp
 
-  
Firebase Authentication による認証
Firebase Authentication を使用するクライアントからの呼び出しをサポートするには:
- API クラスに App Engine Endpoints API をインポートします。 - import endpoints
- API デコレータに各クライアントの Firebase issuer オブジェクトを追加します。例: - @endpoints.api( name='YOUR_API_NAME', version='VERSION_NUMBER', issuers={'firebase': endpoints.Issuer( 'https://securetoken.google.com/YOUR_PROJECT_ID, 'https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com')})- YOUR_API_NAMEは、API の名前に置き換えます。
- VERSION_NUMBERは、実際の API バージョンで置き換えます(例:- v1)。
- code>YOUR_PROJECT_ID は、クライアントの Google Cloudプロジェクト ID に置き換えます。
 
- 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 API メソッドで、有効な - Userが存在するかどうかを確認して、存在しない場合は- error 401を発生させます。- user = endpoints.get_current_user() # If there's no user defined, the request was unauthenticated, so we # raise 401 Unauthorized.
- Endpoints API をデプロイします。新しいクライアントを追加するたびに API を再デプロイする必要があります。 
クライアントに Firebase 認証を追加する
コードに Firebase Authentication を追加する方法については、Firebase のドキュメントをご覧ください。クライアントに Google Cloud プロジェクトが関連付けられていて、そのプロジェクト ID が API の Firebase issuer の構成に含まれている必要があります。
Auth0 による認証
Auth0 を使用するクライアントからの呼び出しをサポートするには:
- API クラスに App Engine Endpoints API をインポートします。 - import endpoints
- API デコレータに各クライアントの Auth0 issuer オブジェクトを追加します。例: - @endpoints.api( name='YOUR_API_NAME', version='VERSION_NUMBER', issuers={'auth0': endpoints.Issuer( 'https://YOUR_ACCOUNT_NAME.auth0.com', 'https://YOUR_ACCOUNT_NAME.auth0.com/.well-known/jwks.json')})- YOUR_API_NAMEは、API の名前に置き換えます。
- VERSION_NUMBERは、実際の API バージョンで置き換えます(例:- v1)。
- YOUR_ACCOUNT_NAMEは、クライアントに使用する Auth0 アカウント名で置き換えます。
 
- 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 API メソッドで、有効な - Userが存在するかどうかを確認して、存在しない場合は- error 401を発生させます。- user = endpoints.get_current_user() # If there's no user defined, the request was unauthenticated, so we # raise 401 Unauthorized.
- API をデプロイします。新しいクライアントを追加するたびに API を再デプロイする必要があります。 
クライアントに Auth0 認証を追加する
コードに Auth0 認証を追加する方法については、Auth0 のドキュメントをご覧ください。クライアントが API における Auth0 issuer の構成に含まれている必要があります。
Google ID トークンによる認証
Google ID トークンを使用して認証するクライアントからの呼び出しをサポートするには:
- クライアント アプリケーションごとに OAuth 2 クライアント ID を取得します。このクライアント ID は、クライアント アプリケーションのオーナーがコンソールで生成する必要があります。 Google Cloud 手順については、クライアント ID の作成をご覧ください。 
- API クラスに App Engine Endpoints API をインポートします。 - import endpoints
- API へのアクセス権を付与するすべてのクライアント ID を - allowed_client_idsに指定し、さらに Android クライアントに属するクライアント ID を API デコレータの- audiencesフィールドに指定します。例:- @endpoints.api( name='YOUR_API_NAME', version='VERSION_NUMBER', allowed_client_ids=ALLOWED_CLIENT_IDS, audiences=[ANDROID_AUDIENCE]) class AuthedGreetingApi(remote.Service): # ...- ALLOWED_CLIENT_IDSは、各クライアントのプロジェクトで生成された OAuth 2 クライアント ID のリストで置き換えます。- ANDROID_AUDIENCEは、Android ウェブ クライアント ID のリストで置き換えます。ウェブ クライアント ID は、クライアント ID の末尾に- .apps.googleusercontent.comを追加したものです(例:- YOUR_CLIENT_ID.apps.googleusercontent.com)。
- 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 API メソッドで、有効な - Userが存在するかどうかを確認して、存在しない場合は- error 401を発生させます。- user = endpoints.get_current_user() # If there's no user defined, the request was unauthenticated, so we # raise 401 Unauthorized.
- Endpoints API をデプロイします。新しいクライアントを追加するたびに API を再デプロイする必要があります。 
クライアントに Google ID トークン認証を追加する
クライアントに認証コードを追加する方法については、以下を参照してください。
次のステップ
ユーザー認証の背景情報や、ユーザー認証と API キー承認の違いについては、API キーを使用する理由と条件をご覧ください。