ユーザーの認証

このページでは、Cloud Endpoints Frameworks を使用して API でクライアント アプリケーションからのユーザー認証をサポートする方法について説明します。現在サポートされているクライアントは、Android クライアントと JavaScript クライアントです。

Endpoints Frameworks では、以下のいずれかの方式を使用するクライアント アプリケーションからのユーザー認証をサポートしています。

どの認証方法を使用する場合でも、適切な認証情報かどうかを確認する各 API メソッドで、以下のセクションの説明に従って有効な User かどうかを確認する必要があります。

前提条件

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

  • Google Cloud プロジェクトが作成されていること。

  • API 管理の追加

  • クライアントで JWT を使用して認証済みリクエストを API に送信する場合は、JWT を HTTP リクエストの Authorization ヘッダーに含める必要があります。JWT には次の必須のクレームが含まれている必要があります。

    • iss
    • sub
    • aud
    • iat
    • exp

Firebase Authentication による認証

Firebase Authentication を使用するクライアントからの呼び出しをサポートするには:

  1. API クラスに App Engine Endpoints API をインポートします。

    import endpoints
    
  2. 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 に置き換えます。
  3. 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 API メソッドで、有効な User が存在するかどうかを確認して、存在しない場合は error 401 を発生させます。

    user = endpoints.get_current_user()
    # If there's no user defined, the request was unauthenticated, so we
    # raise 401 Unauthorized.
    
  4. Endpoints API をデプロイします。新しいクライアントを追加するたびに API を再デプロイする必要があります。

クライアントに Firebase 認証を追加する

コードに Firebase Authentication を追加する方法については、Firebase のドキュメントをご覧ください。クライアントに Google Cloud プロジェクトが関連付けられていて、そのプロジェクト ID が API の Firebase issuer の構成に含まれている必要があります。

Auth0 による認証

Auth0 を使用するクライアントからの呼び出しをサポートするには:

  1. API クラスに App Engine Endpoints API をインポートします。

    import endpoints
    
  2. 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 アカウント名で置き換えます。
  3. 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 API メソッドで、有効な User が存在するかどうかを確認して、存在しない場合は error 401 を発生させます。

    user = endpoints.get_current_user()
    # If there's no user defined, the request was unauthenticated, so we
    # raise 401 Unauthorized.
    
  4. API をデプロイします。新しいクライアントを追加するたびに API を再デプロイする必要があります。

クライアントに Auth0 認証を追加する

コードに Auth0 認証を追加する方法については、Auth0 のドキュメントをご覧ください。クライアントが API における Auth0 issuer の構成に含まれている必要があります。

Google ID トークンによる認証

Google ID トークンを使用して認証するクライアントからの呼び出しをサポートするには:

  1. クライアント アプリケーションごとに OAuth 2 クライアント ID を取得します。このクライアント ID は、クライアント アプリケーションのオーナーが Google Cloud Console で生成する必要があります。手順については、クライアント ID の作成をご覧ください。

  2. API クラスに App Engine Endpoints API をインポートします。

    import endpoints
    
  3. 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)。

  4. 次のメソッド定義例のように、認証情報が正しいかどうかを確認する各 API メソッドで、有効な User が存在するかどうかを確認して、存在しない場合は error 401 を発生させます。

    user = endpoints.get_current_user()
    # If there's no user defined, the request was unauthenticated, so we
    # raise 401 Unauthorized.
    
  5. Endpoints API をデプロイします。新しいクライアントを追加するたびに API を再デプロイする必要があります。

クライアントに Google ID トークン認証を追加する

クライアントに認証コードを追加する方法については、以下を参照してください。

次のステップ

ユーザー認証の背景情報や、ユーザー認証と API キー承認の違いについては、API キーを使用する理由と条件をご覧ください。