ID プールのアプリケーションの例 - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ID プールのアプリケーションの例

Amazon Cognito ID プールの最も一般的なユースケースは、複数のサインインシステムからユーザーをフェデレーションし、アクセスが制限された一時的な AWS 認証情報をクライアントに直接配信することです。これにより、 AWS リソースにアクセスするためのアクセス許可のための認証情報ブローカーを構築する必要がなくなります。たとえば、ユーザーにソーシャルメディアアカウントでサインインさせ、モバイルアプリケーションの Amazon S3 からアプリアセットにアクセスさせる必要がある場合があります。ID プールは、ユーザープールでサインインするユーザーに認証情報も配信します。

このチュートリアルでは、ID プールでサポートされている ID プロバイダー (IdPs) を使用して、拡張および基本認証フローで一時的な認証およびゲスト認証情報を取得できるウェブアプリケーションを作成します。ウェブ開発の経験がある場合は、GitHub からサンプルアプリをダウンロードしてください。

GitHub からサンプルアプリケーションをダウンロードする

このサンプルアプリケーションは、Amazon Cognito ID プールの次の機能を示しています。

ID プールの認証フロー
  • API リクエストの詳細な内訳による認証フローの強化

  • API リクエストの詳細な内訳を含む基本的な認証フロー

ゲスト (認証されていない) アクセスの実装
  • サインインを必要とせずに制限付き AWS のサービス アクセスを提供する

サポートされている ID プロバイダーとの統合
  • コンシューマーアクセス用のソーシャル IdPs (Facebook、Amazon、Twitter、Apple、Google)

  • 企業ユーザー向けのエンタープライズ IdPsOpenID Connect または SAML 経由)

  • Amazon Cognito ユーザープール

AWS 認証情報の管理
  • ID プロバイダートークンを一時的な AWS 認証情報と交換する

  • 一時的な認証情報を使用して AWS サービスに安全にアクセスする

開発用ウェブサーバーでアプリケーションを設定し、ブラウザでアクセスすると、次のオプションが表示されます。

認証方法オプションとインタラクティブなデモセクションを含むメインページを示す Amazon Cognito ID プールデモアプリケーションのウェブインターフェイスのスクリーンショット。

前提条件

開始する前に、次のリソースを設定する必要があります。

  • Amazon Cognito にアクセスできる AWS アカウント。 AWS アカウントがない場合は、「」の手順に従いますの開始方法 AWS

  • Python 3.8 以降が開発マシンにインストールされている。

  • GitHub アクセス。

  • AWS Amazon Cognito APIs に認証されたリクエストを行うアクセス許可で設定された 認証情報。これらの認証情報は、開発者認証に必要です。

特定の SDK での AWS 認証情報と ID プールフェデレーションの実装の詳細については、「」を参照してください認証情報の取得

認証プロバイダーのセットアップ

このアプリケーションで最良の結果を得るには、1 つ以上のサードパーティー ID プロバイダー (IdPs) または Amazon Cognito ユーザープールを設定して Amazon Cognito ID プールと統合します。前提条件を満たし、このデモアプリケーションを実行する前に、設定する ID プロバイダーを選択します。Amazon Cognito コンソールでは、ID プールとプロバイダーを設定するプロセスについて説明します。

注記

このデモアプリケーションでは、サポートされているすべての ID プロバイダーをセットアップする必要はありません。ユースケースに一致するものから始めることができます。各リンクには、詳細な設定手順が記載されています。

デモアプリケーションをデプロイする

リポジトリをクローンします

  1. ターミナルウィンドウを開きます。

  2. aws-doc-sdk-examples リポジトリのクローンを作成するか、リポジトリでこのフォルダを取得します。

    git clone https://github.com/awsdocs/aws-doc-sdk-examples.git
  3. プロジェクトディレクトリに移動します。

    cd python/example_code/cognito/scenarios/identity_pools_example_demo/web

ID プールの作成

アプリケーションの Amazon Cognito ID プールを作成するには、「」の手順に従いますアイデンティティプールコンソールの概要

デモアプリケーションの ID プールを設定するには
  1. Amazon Cognito コンソールを開きます。

  2. 左側のナビゲーションメニューから、ID プールを選択します。既存の ID プールを選択するか、新しい ID プールを作成します。

  3. ユーザーアクセスで、認証されたアクセスゲストアクセスを有効にします。新規または既存の IAM ロールを設定し、各タイプのユーザーに付与するアクセス許可を割り当てます。

  4. ユーザーアクセスで、設定する ID プロバイダーを設定します。

  5. ID プールのプロパティで、基本 (クラシック) 認証を有効にします。

  6. ブラウザを ID プールのコンソールに開いたままにします。ID プール ID およびその他の設定情報は、アプリケーションのセットアップで使用します。

アプリケーションを設定して実行する

次の手順では、デモアプリケーションの初期セットアップについて説明します。

デモアプリケーションを設定するには
  1. aws-doc-sdk-examples クローンの python/example_code/cognito/scenarios/identity_pools_example_demo/webでコマンドラインを開きます。

  2. サンプル環境.envファイルをコピーしてファイルを作成します。 https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/python/example_code/cognito/scenarios/identity_pools_example_demo/web/.env.example

    cp .env.example .env
  3. テキストエディタで .env ファイルを開きます。ファイル内のサンプル値を独自の設定値に置き換えます。

  4. バックエンドの依存関係をインストールします。

    pip install -r requirements.txt
  5. バックエンドサーバーを起動します。

    cd backend python oauth_server.py
  6. 新しいターミナルウィンドウを開き、プロジェクトディレクトリに移動してフロントエンドサーバーを起動します。

    cd frontend python -m http.server 8001
  7. ブラウザを開き、http://localhost:8001 でアプリケーションを開きます。ブラウザにデモアプリケーションインターフェイスが表示され、ID プール認証をテストする準備が整います。

ID プールで認証方法を調べる

このセクションでは、Amazon Cognito ID プールデモアプリケーションを使用した基本認証フローと拡張認証フローについて説明します。このデモでは、ID プールがさまざまな ID プロバイダーと連携して、アプリケーションユーザーに一時的な AWS 認証情報を提供する方法について説明します。

サンプルアプリケーションのインタラクティブデモセクションでは、まず ID プールでサポートされている 2 種類のアクセスから選択します。

認証されていない (ゲスト) アクセス

まだ認証されていないユーザーに AWS 認証情報を提供します。

認証されたアクセス

ID プロバイダートークンを、利用可能なアクセス許可の全範囲を持つ AWS 認証情報と交換します。.env ファイルで設定した ID プロバイダーから ID プロバイダーを選択します。

このステップでは、ID プールのゲストアクセス機能を使用して、認証されていない (ゲスト) ユーザーの一時的な AWS 認証情報を取得する方法を示します。デモアプリケーションでは、拡張フローと基本フローの両方をテストして、ユーザーのサインインを必要とせずに ID プールが認証情報を発行する方法を確認します。ゲストアクセスは、認証されたアクセスと同じ API シーケンスを使用しますが、ID プロバイダートークン (Google、Facebook、またはエンタープライズプロバイダーからの SAML アサーションからの OAuth トークンなど) は提供しません。

認証を必要とせずにユーザーに制限 AWS 付きアクセスを提供する情報をお探しの場合は、引き続きお読みください。ゲストアクセスを実装したら、匿名ユーザーに AWS 認証情報を安全に提供し、2 つの認証フローの違いを理解する方法について説明します。

重要

認証されていないアクセスは、インターネットアクセスを持つすべてのユーザーに認証情報を発行できるため、パブリック APIs やグラフィックアセットなど、最小限のセキュリティを必要とする AWS リソースに最適です。このステップに進む前に、ゲストアクセスを有効にして ID プールを設定し、アクセス許可を制限するための適切な IAM ポリシーが設定されていることを確認します。

Guest access with enhanced flow

拡張フローは、2 つの API リクエストを持つ認証されていないユーザーの認証情報を取得する AWS 効率的なアプローチです。

拡張フローでゲストアクセスをテストするには
  1. デモアプリケーションで、インタラクティブデモセクションに移動します。

  2. ゲストアクセスタブを選択します。

  3. 拡張フロータブを選択します。

  4. ゲストアクセスをテストを選択します。

  5. アプリは、追加の認証プロンプトなしで ID プールから一時的な AWS 認証情報を取得します。

  6. 認証に成功すると、ウェブインターフェイスに結果パネルが表示され、これらを調べるには 2 つのオプションがあります。

    1. 認証情報のみの表示ボタン: API フローの詳細なしで生成された一時的な AWS 認証情報を直接表示する場合は、このボタンを選択します。

      { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-07T00:58:21-07:00" } }
    2. 詳細な API フローを表示するボタン: step-by-stepの API リクエストを表示する場合は、このボタンを選択します。

      • GetId() を使用した API リクエストidentityPoolId。ゲストアクセスに認証トークンは必要ありません

        { "IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }

        有効な場合、ユーザーの を検索または作成して返しますIdentityID。レスポンスの例は次のようになります。

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }
      • GetCredentialsForIdentity() を返した identityPoolId

        POST GetCredentialsForIdentity { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }

        Cognito はゲストアクセスを検証し、 で認証されていないロールを内部的に引き受け AWS STS、一時的な AWS 認証情報を返します。(この呼び出しでは IAM 認証はありません。ロールの信頼では を許可する必要があります)cognito-identity-amazonzaws.com

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-07T00:58:21-07:00" } }
Guest access with basic flow

基本的なフローでは、ID の取得と認証情報の生成のための個別の API リクエストを使用して、認証プロセスをきめ細かく制御できます。

基本的なフローでゲストアクセスをテストするには
  1. デモアプリケーションで、インタラクティブデモセクションに移動します。

  2. ゲストアクセスタブを選択します。

  3. 基本的なフロータブを選択します。

  4. ゲストアクセスのテストを選択します。

  5. アプリは、追加の認証プロンプトなしで ID プールから一時的な AWS 認証情報を取得します。

  6. 認証に成功すると、ウェブインターフェイスに結果パネルが表示され、これらを調べるには 2 つのオプションがあります。

    1. 認証情報のみの表示ボタン: API フローの詳細なしで生成された一時的な AWS 認証情報を直接表示する場合は、このボタンを選択します。

      { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T13:36:17-07:00" } }
    2. 詳細な API フローを表示するボタン: step-by-stepの API リクエストを表示する場合は、このボタンを選択します。

      • GetId() ID プール ID を使用した API リクエスト。ゲストアクセスに認証トークンは必要ありません。

        POST GetId { "IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" }

        有効な場合、ユーザーの を検索または作成して返しますIdentityID。レスポンスの例は次のようになります。

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }
      • GetOpenIdToken() が返されIdentityID、同じLoginsマップを持つ

        POST GetOpenIdToken { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Token": "eyJraWQiOiJFWAMPLE......" }

        このステップで何が起こるか: Amazon Cognito は、この を表す cognito-identity.amazonaws.com から有効期間の短い OpenID Connect ウェブ ID トークンを発行しますIdentityId。トークンには、aud (ID プール ID) や amr (認証済みまたは未認証) など、 が AWS STS 評価する OIDC クレームが含まれます。IAM ロールの信頼ポリシーには、これらのクレームが必要です。

      • AssumeRoleWithWebIdentity() - アプリが AWS STS 直接 を呼び出して Amazon Cognito OpenID トークンを一時的な AWS 認証情報と交換する

        POST sts:AssumeRoleWithWebIdentity { "RoleArn": "arn:aws:iam::111122223333:role/Cognito_IdentityPoolUnauth_Role", "WebIdentityToken": "eyJraWQiOiJFWAMPLE......" }

        レスポンス:

        { "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "FwoGZXIvYXdzEEXAMPLE......" } }

        このステップで何が起こるか: 検証後: は一時的な AWS 認証情報を返します

一時的な認証情報を使用する

これらの一時的な認証情報は標準 AWS 認証情報として機能しますが、ID プールの認証されていない IAM ロールによって定義されたアクセス許可は制限されます。任意の AWS SDK または で使用できます AWS CLI。認証情報を使用して AWS SDKs「SDK およびツールリファレンスガイド」の「標準化された認証情報プロバイダー AWS SDKs 」を参照してください。

以下の例は完全なリストではありませんが、ID プールのゲスト機能がユーザーエクスペリエンスを向上させる一般的な方法を示しています。

次の例では、ゲストユーザーとして制限された Amazon S3 アクセスの認証情報プロバイダーを設定します。

Python
# Example: Using credentials with boto3 import boto3 # Configure client with temporary credentials s3_client = boto3.client( 's3', aws_access_key_id='AKIAIOSFODNN7EXAMPLE', aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', aws_session_token='IQoJb3JpZ2luX2VjEEXAMPLE......' ) # Make API requests within IAM role permissions response = s3_client.list_objects_v2(Bucket='my-public-bucket') # Access public content for obj in response.get('Contents', []): print(f"File: {obj['Key']}, Size: {obj['Size']} bytes")
JavaScript
// Example: Accessing public content import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; const s3Client = new S3Client({ region: "us-east-1", credentials: { accessKeyId: 'AKIAIOSFODNN7EXAMPLE', secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', sessionToken: 'IQoJb3JpZ2luX2VjEEXAMPLE......' } }); // Access public images or documents const response = await s3Client.send(new GetObjectCommand({ Bucket: 'my-public-content', Key: 'product-catalog.pdf' }));

次の例では、ゲストユーザーとして Amazon DynamoDB への読み取り専用アクセスを使用します。

Python
# Example: Limited app functionality for trial users import boto3 dynamodb = boto3.client( 'dynamodb', aws_access_key_id='AKIAIOSFODNN7EXAMPLE', aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', aws_session_token='IQoJb3JpZ2luX2VjEEXAMPLE......' ) # Allow guest users to view sample data (limited to 5 items) response = dynamodb.scan(TableName='SampleProducts', Limit=5)
JavaScript
// Example: Limited app functionality for trial users import { DynamoDBClient, ScanCommand } from "@aws-sdk/client-dynamodb"; const dynamodbClient = new DynamoDBClient({ region: "us-east-1", credentials: { accessKeyId: 'AKIAIOSFODNN7EXAMPLE', secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', sessionToken: 'IQoJb3JpZ2luX2VjEEXAMPLE......' } }); // Allow guest users to view sample data (limited to 5 items) const response = await dynamodbClient.send(new ScanCommand({ TableName: 'SampleProducts', Limit: 5 }));

このステップでは、Amazon Cognito ID プールでソーシャル ID プロバイダーを使用するための全体的なフローについて説明します。ソーシャル認証は、フェデレーション ID 管理を通じてセキュリティを維持しながら、使い慣れたサインインエクスペリエンスを提供します。Google、Facebook、Amazon などのソーシャル ID プロバイダー (IdP) からサインインし、その IdP トークンを一時的な AWS 認証情報と交換できます。Twitter と Apple の統合は ID プールでもサポートされていますが、サンプルアプリケーションではサポートされていません。

ID プール自体はユーザーディレクトリではありません。パスワードやプロファイルフィールドは保存されません。代わりに、外部 IdPs を信頼してユーザーを認証し、IAM ロールの認証情報を提供することで、既に認証されたユーザーに サービスを直接呼び AWS 出す権限を付与することに重点を置いています。

Social identity provider with enhanced flow

このセクションでは、ソーシャル ID プロバイダーを使用してユーザーにサインインし、拡張フローを使用して Amazon Cognito ID プールのプロバイダートークンを一時的な認証情報と交換してリソースをリクエスト AWS する方法について説明します。

サンプルアプリケーションの拡張フローでソーシャルサインインを使用する
  1. デモアプリケーションで、インタラクティブデモセクションに移動します。

  2. 認証済みアクセスタブを選択します。

  3. 拡張フロータブを選択します。

  4. 設定したサポートされているソーシャルプロバイダーを選択します。たとえば、Google でサインインFacebook でサインインAmazon でログインなどです。

  5. サインインして、アプリケーションとユーザーデータを共有することに同意します。

  6. プロバイダーがアプリケーションのリダイレクト URI にリダイレクトバックする

  7. アプリがプロバイダートークンを ID プールに送信し、一時的な AWS 認証情報を取得する

  8. アプリケーションはウェブインターフェイスに結果パネルを表示します。

    認証に成功すると、ウェブインターフェイスに結果パネルが表示され、これらを調べるには 2 つのオプションがあります。

    1. 認証情報のみの表示ボタン: API フローの詳細なしで生成された一時的な AWS 認証情報を直接表示する場合は、このボタンを選択します。

      { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T13:36:17-07:00" } }
    2. 詳細な API フローを表示するボタン: step-by-stepの API リクエストを表示する場合は、このボタンを選択します。

      • アプリはソーシャル IdP でユーザーにサインインし、プロバイダートークンを取得します。ID プールは、ソーシャルプロバイダーからのこれらのアーティファクトを受け入れます。

        ID プロバイダー Cognito プロバイダーキー 目的
        Google accounts.google.com Google サインインからの OAuth 2.0 トークン
        Facebook graph.facebook.com Facebook ログインからトークンにアクセスする
        Amazon www.amazon.com Login with Amazon の OAuth トークン

        ソーシャルプロバイダーとの認証が成功すると、アプリはアクセストークンとその他の認証の詳細を含む OAuth レスポンスを受け取ります。

        { "access_token": "ya29.A0AS3H6NEXAMPLE......", "expires_in": 3599, "scope": "openid https://www.examplesocial....", "token_type": "Bearer", "id_token": "eyJhbGciOiJSUzI1NiIsEXAMPLE......" }
      • GetId() ID プール ID とソーシャルプロバイダートークンを含むLoginsマップを含む API リクエスト

        POST GetId { "IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "Logins": { "accounts.google.com": "eyJhbGciOiJSUzI1NiIsEXAMPLE......" } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }
      • GetCredentialsForIdentity() が返IdentityIDされ、同じLoginsマップを持つ

        POST GetCredentialsForIdentity { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Logins": { "accounts.google.com": "eyJhbGciOiJSUzI1NiIsEXAMPLE......" } }

        レスポンス:

        { "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-07T00:58:21-07:00" }, "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }

何が起こったか: Amazon Cognito は、設定されたプロバイダーに対してトークンを検証し、プロバイダーの設定に基づいて IAM ロールを選択し、ユーザーに代わって AWS STS を呼び出しました。その後、ID プールは一時的な認証情報を返します。

Social identity provider with basic flow

このセクションでは、ソーシャル ID プロバイダーを使用してユーザーにサインインし、基本的なフローを使用して Amazon Cognito ID プールのプロバイダートークンを一時的な認証情報と交換して AWS サービスを呼び出す方法を示します。

サンプルアプリケーションの基本的なフローでソーシャルサインインを使用する
  1. デモアプリケーションで、インタラクティブデモセクションに移動します。

  2. 認証済みアクセスタブを選択します。

  3. 基本フロータブを選択します。

  4. 設定したサポートされているソーシャルプロバイダーを選択します。たとえば、Google でサインインFacebook でサインインAmazon でログインなどです。

  5. サインインして、アプリケーションとユーザーデータを共有することに同意します。

  6. プロバイダーがアプリケーションのリダイレクト URI にリダイレクトバックする

  7. アプリがプロバイダートークンを ID プールに送信し、一時的な AWS 認証情報を取得する

  8. アプリケーションはウェブインターフェイスに結果パネルを表示します。

    認証に成功すると、ウェブインターフェイスに結果パネルが表示され、これらを調べるには 2 つのオプションがあります。

    1. 認証情報のみの表示ボタン: API フローの詳細なしで生成された一時的な AWS 認証情報を直接表示する場合は、このボタンを選択します。

      { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T13:36:17-07:00" } }
    2. 詳細な API フローの表示ボタン: step-by-stepの API リクエストを表示する場合は、このボタンを選択します。

      • アプリはソーシャル IdP でユーザーにサインインし、プロバイダートークンを取得します。ID プールは、ソーシャルプロバイダーからのこれらのアーティファクトを受け入れます。

        ID プロバイダー Cognito プロバイダーキー 目的
        Google accounts.google.com Google サインインからの OAuth 2.0 トークン
        Facebook graph.facebook.com Facebook ログインからトークンにアクセスする
        Amazon www.amazon.com Login with Amazon の OAuth トークン

        ソーシャルプロバイダーとの認証が成功すると、アプリはアクセストークンとその他の認証の詳細を含む OAuth レスポンスを受け取ります。

        { "access_token": "ya29.A0AS3H6NEXAMPLE......", "expires_in": 3599, "scope": "openid https://www.examplesocial....", "token_type": "Bearer", "id_token": "eyJhbGciOiJSUzI1NiIsEXAMPLE......" }
      • GetId() ID プール ID とソーシャルプロバイダートークンを含むLoginsマップを含む API リクエスト

        POST GetId { "IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "Logins": { "accounts.google.com": "token..." } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }
      • GetOpenIdToken() が返IdentityIDされ、同じログインマップを持つ

        POST GetOpenIdToken { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Logins": { "accounts.google.com": "token..." } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Token": "eyJraWQiOiJFWAMPLE......" }
      • AssumeRoleWithWebIdentity() OpenID トークンを使用する

        POST AssumeRoleWithWebIdentity { "RoleArn": "arn:aws:iam::111122223333:role/Cognito_IdentityPoolAuth_Role", "WebIdentityToken": "eyJraWQiOiJFWAMPLE......" }

        レスポンス:

        { "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T14:36:17-07:00" } }

何が起こったか: Amazon Cognito は、設定されたプロバイダーに対してトークンを検証し、OpenID トークンを発行しました。アプリケーションは AWS STS 直接 を呼び出して IAM ロールを引き受け、一時的な認証情報を受け取ります。

ソーシャルアクセスを理解する

  • ソーシャルユーザーは、ソーシャルプロバイダーで認証した後、Amazon Cognito ID プールを通じて一時的な AWS 認証情報を受け取ります。

  • 認証された各ユーザーは、セッション間で保持される一意の ID を取得します。

  • これらの認証情報は、認証されたアクセス用に特別に設計された IAM ロールにリンクされ、ゲストアクセスよりも広範なアクセス許可を提供します。

  • ソーシャルプロバイダートークンは AWS 認証情報と交換され、ユーザー ID とアクセス許可が維持されます。

このステップでは、ユーザープールマネージドログイン統合による Amazon Cognito 認証について説明します。ユーザープールを IdP として ID プールにリンクすると、ユーザープールトークンは ID プールが一時的な認証情報を発行することを許可します。

User pool authentication with enhanced flow

拡張フローは、単一の API リクエストで Amazon Cognito ID プールを介して認証情報を取得する AWS 効率的なアプローチを提供します。

ID プール拡張フローで Amazon Cognito ユーザープール認証を使用する
  1. デモアプリケーションで、インタラクティブデモセクションに移動します。

  2. 認証済みアクセスタブを選択します。

  3. 拡張フロータブを選択します。

  4. Amazon Cognito ユーザープールでサインインを選択する

  5. マネージドログインでユーザー名とパスワードを使用してサインインを完了します。

  6. ユーザープールは、認可コードを使用してアプリケーションリダイレクト URI にリダイレクトします。

  7. アプリケーションは、認可コードをユーザープールと JSON ウェブトークンと交換します。

  8. アプリケーションは ID トークンを ID プールと一時的な AWS 認証情報と交換します。

  9. アプリケーションはウェブインターフェイスに結果パネルを表示します

    認証に成功すると、ウェブインターフェイスに結果パネルが表示され、これらを調べるには 2 つのオプションがあります。

    1. 認証情報のみの表示ボタン: API フローの詳細なしで生成された一時的な AWS 認証情報を直接表示する場合は、このボタンを選択します。

      { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T13:36:17-07:00" } }
    2. 詳細な API フローを表示するボタン: step-by-stepの API リクエストを表示する場合は、このボタンを選択します。

      • アプリは Amazon Cognito でユーザーにサインインします。ユーザープールによる認証が成功すると、アプリは ID トークン (JWT) を含む OAuth 2.0 レスポンスを受け取ります。ID プールは、次のプロバイダーキー形式を使用してユーザープールから JWT ID トークンを受け入れます。

        ID プロバイダー Cognito プロバイダーキー 目的
        Amazon Cognito ユーザープール cognito-idp.{region}.amazonaws.com/{user-pool-id} Amazon Cognito ユーザープールからの JWT ID トークン

        ユーザープールによる認証が成功すると、アプリは ID トークン (JWT) を含む OAuth 2.0 レスポンスを受け取ります。

        { "id_token": "eyJraWQiOiJFWAMPLE......", "token_type": "Bearer", "expires_in": 3600 }
      • GetId() identityPoolIdと、 にマッピングされたユーザープールプロバイダーキーを含むLoginsマップを含む API リクエストid_token。Amazon Cognito は、ユーザープール ID トークンの署名、発行者、有効期限、対象者 (aud) が、ID プール内のこのユーザープール IdP に登録したアプリクライアント IDs の 1 つと一致することを確認しました。

        POST GetId { "AccountId": "111122223333", "IdentityPoolId": "us-east-1:1ac4a76d-1fef-48aa-83af-4224799c0b5c", "Logins": { "cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE123": "eyJraWQiOiJFWAMPLE......" } }

        有効な場合、ユーザーの を検索または作成して返しますIdentityID。レスポンスの例は次のようになります。

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }
      • GetCredentialsForIdentity() が返された identityPoolIdで、a= が と同じLoginsマップ。 id_tokenAmazon Cognito は、ユーザープール ID トークンの署名、発行者、有効期限、対象者 (aud) が、ID プール内のこのユーザープール IdP に登録したアプリクライアント IDs の 1 つと一致することを再検証します。

        POST GetCredentialsForIdentity { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Logins": { "cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE123": "eyJraWQiOiJFWAMPLE......" } }

        有効な場合、IAM ロール (roles-in-token、ルール、またはデフォルト) を選択し、ユーザーに代わって を呼び出し AWS STS 、一時的な AWS 認証情報を返します。レスポンスの例は次のようになります。

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "ASIAW7TIP7EJEXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T14:36:17-07:00" } }
User pool authentication with basic flow

基本的なフローでは、ID の取得と認証情報の生成のための個別の API リクエストを使用して、認証プロセスをきめ細かく制御できます。

ID プールの基本フローで Amazon Cognito ユーザープール認証を使用する
  1. デモアプリケーションで、インタラクティブデモセクションに移動します。

  2. 認証済みアクセスタブを選択します。

  3. 基本フロータブを選択します。

  4. Amazon Cognito ユーザープールでサインインを選択する

  5. マネージドログインでユーザー名とパスワードを使用してサインインを完了します。

  6. ユーザープールは、認可コードを使用してアプリケーションリダイレクト URI にリダイレクトします。

  7. アプリケーションは、認可コードをユーザープールと JSON ウェブトークンと交換します。

  8. アプリケーションは ID トークンを ID プールと一時的な AWS 認証情報と交換します。

  9. アプリケーションはウェブインターフェイスに結果パネルを表示します

    認証に成功すると、ウェブインターフェイスに結果パネルが表示され、これらを調べるには 2 つのオプションがあります。

    1. 認証情報のみの表示ボタン: API フローの詳細なしで生成された一時的な AWS 認証情報を直接表示する場合は、このボタンを選択します。

      { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T13:36:17-07:00" } }
    2. 詳細な API フローの表示ボタン: step-by-stepの API リクエストを表示する場合は、このボタンを選択します。

      • アプリは Amazon Cognito ユーザープールでユーザーにサインインし、アーティファクトとして ID トークン (JWT) を取得します。ユーザープールによる認証が成功すると、アプリは ID トークン (JWT) を含む OAuth レスポンスを受け取ります。ID プールはこのトークンを認証に使用します。

        { "id_token": "eyJraWQiOiJFWAMPLE......", "token_type": "Bearer", "expires_in": 3600 }
      • GetId() ID プール ID と、ユーザープールプロバイダーキーと ID トークンを値として含むLoginsマップを含む API リクエスト。Amazon Cognito は、ユーザープール ID トークンの署名、有効期限、対象者 (aud) が、ID プール内のこのユーザープール IdP に登録したアプリクライアント IDs の 1 つと一致することを確認しました。

        POST GetId { "AccountId": "111122223333", "IdentityPoolId": "us-east-1:1ac4a76d-1fef-48aa-83af-4224799c0b5c", "Logins": { "cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE123": "eyJraWQiOiJFWAMPLE......" } }

        有効な場合、ユーザーの を検索または作成して返しますIdentityID。レスポンスの例は次のようになります。

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }
      • GetOpenIdToken() が返IdentityIDされ、同じLoginsマップを持つ

        POST GetOpenIdToken { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Logins": { "cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE123": "eyJraWQiOiJFWAMPLE......" } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Token": "eyJraWQiOiJFWAMPLE......" }

        このステップで何が起こるか: Amazon Cognito は、この を表す cognito-identity.amazonaws.com から有効期間の短い OpenID Connect ウェブ ID トークンを発行しますIdentityId。トークンには、aud (ID プール ID) や amr (認証済みまたは未認証) など、 が AWS STS 評価する OIDC クレームが含まれます。IAM ロールの信頼ポリシーには、これらのクレームが必要です。

      • AssumeRoleWithWebIdentity() - アプリが AWS STS 直接 を呼び出して Amazon Cognito OpenID トークンを一時的な AWS 認証情報と交換する

        POST sts:AssumeRoleWithWebIdentity { "RoleArn": "arn:aws:iam::111122223333:role/Cognito_IdentityPoolAuth_Role", "WebIdentityToken": "eyJraWQiOiJFWAMPLE......", "RoleSessionName": "CognitoIdentityCredentials" }

        レスポンス:

        { "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "FwoGZXIvYXdzEEXAMPLE......", "Expiration": "2025-08-12T14:36:17-07:00" }, "AssumedRoleUser": { "AssumedRoleId": "AROAW7TIP7EJYEXAMPLE:CognitoIdentityCredentials", "Arn": "arn:aws:sts::111122223333:assumed-role/Cognito_IdentityPoolAuth_Role/CognitoIdentityCredentials" } }

        デモアプリケーションの動作: アプリケーションは OpenID トークンを から GetOpenIdToken()に送信し AWS STS、一時的な認証情報を要求しました。 AWS STS は検証チェックを実行し、認証情報を発行しました。

  • ユーザープールのユーザーは、Amazon Cognito ID プールを通じて一時的な AWS 認証情報を受け取ります。

  • これらの認証情報は、ID プール設定で指定された IAM ロールにリンクされます。

  • ユーザープール ID トークンは、ID プールを介して AWS 認証情報と交換されます。

このステップでは、SAML 認証について説明します。ユーザーは、SAML をサポートするエンタープライズ ID プロバイダーでサインインして AWS サービスにアクセスできます。SAML を使用した基本的なフローは、サンプルアプリケーションでサポートされていません。

SAML authentication with enhanced flow

このセクションでは、SAML ID プロバイダーを使用してユーザーにサインインし、拡張フローを使用して Amazon Cognito ID プールの SAML アサーションを サービスを呼び出す AWS ための一時的な AWS 認証情報と交換する方法について説明します。

ID プール拡張フローで SAML 認証を使用する
  1. デモアプリケーションで、インタラクティブデモセクションに移動します。

  2. 認証済みアクセスタブを選択します。

  3. 拡張フロータブを選択します。

  4. SAML プロバイダーでサインインを選択する

  5. エンタープライズ認証情報を使用してサインインを完了します。

  6. ユーザープールは、SAML アサーションを使用してアプリケーションリダイレクト URI にリダイレクトします。

  7. アプリケーションは、認可コードをユーザープールと JSON ウェブトークンと交換します。

  8. アプリケーションは SAML レスポンスを ID プールと一時的な AWS 認証情報と交換します。

  9. アプリケーションはウェブインターフェイスに結果パネルを表示します

    認証に成功すると、ウェブインターフェイスに結果パネルが表示され、これらを調べるには 2 つのオプションがあります。

    1. 認証情報のみの表示ボタン: API フローの詳細なしで生成された一時的な AWS 認証情報を直接表示する場合は、このボタンを選択します。

      { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T13:36:17-07:00" } }
    2. 詳細な API フローを表示するボタン: step-by-stepの API リクエストを表示する場合は、このボタンを選択します。

      • アプリは SAML IdP を使用してユーザーにサインインし、SAML レスポンスを取得します。ID プールは、SAML プロバイダー ARN をキーとして使用して、エンタープライズプロバイダーからの SAML アサーションを受け入れます。

        ID プロバイダー Cognito プロバイダーキー 目的
        SAML プロバイダー arn:aws:iam::111122223333:saml-provider/EXAMPLE エンタープライズ IdPs からの SAML アサーション

        SAML プロバイダーによる認証が成功すると、アプリケーションはコールバック URL への HTTP POST 経由で SAML レスポンスを受け取ります。

        { "saml_response": "PD94bWwgdmVyc2lvbj0iMS4wIiBFWAMPLE...", "provider_arn": "arn:aws:iam::111122223333:saml-provider/EXAMPLE", "status": "Authentication successful" }
      • GetId() ID プール ID と SAML プロバイダーの ARN とアサーションを含むLoginsマップを含む API リクエスト

        POST GetId { "AccountId": "111122223333", "IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "Logins": { "arn:aws:iam::111122223333:saml-provider/EXAMPLE": "PD94bWwgdmVyc2lvbj0iMS4wIiBFWAMPLE..." } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }
      • GetCredentialsForIdentity() が返IdentityIDされ、同じLoginsマップを持つ

        POST GetCredentialsForIdentity { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Logins": { "arn:aws:iam::111122223333:saml-provider/EXAMPLE": "PD94bWwgdmVyc2lvbj0iMS4wIiBFWAMPLE..." } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......" } }

何が起こったか: Amazon Cognito は、設定されたプロバイダーに対して SAML アサーションを検証し、SAML 属性またはルールに基づいて IAM ロールを選択し、 AWS STS ユーザーに代わって を呼び出しました。

SAML アクセスを理解する

  • エンタープライズユーザーは、SAML プロバイダーで認証した後、Amazon Cognito ID プールから一時的な AWS 認証情報を受け取ります。

  • 認証された各ユーザーは、セッション間で保持される一意の ID を取得します。

  • これらの認証情報は、認証されたアクセス用に特別に設計された IAM ロールにリンクされ、ゲストアクセスよりも広範なアクセス許可を提供します。

  • SAML アサーションは AWS 認証情報と交換され、ユーザー ID とエンタープライズ属性が維持されます。

このステップでは、エンタープライズ ID プロバイダーによる OIDC 認証について説明します。ユーザーは、組織のエンタープライズ ID プロバイダー (Azure AD、Okta、Google Workspace など) を通じてサインインして、 AWS サービスにアクセスできます。標準ベースの認証と AWS リソースの統合に関する情報をお探しの場合は、引き続きお読みください。OIDC 認証を実装したら、OIDC クレームを活用してきめ細かなアクセスコントロールを行う方法について説明します。

OIDC authentication with enhanced flow

このセクションでは、OIDC ID プロバイダーを使用してユーザーにサインインし、拡張フローを使用して Amazon Cognito ID プールの OIDC トークンを一時的な AWS 認証情報と交換して サービスを呼び AWS 出す方法を示します。

ID プール拡張フローで OIDC サインインを使用する
  1. デモアプリケーションで、インタラクティブデモセクションに移動します。

  2. 認証済みアクセスタブを選択します。

  3. 拡張フロータブを選択します。

  4. OIDC プロバイダーでサインインを選択する

  5. エンタープライズ認証情報を使用してサインインを完了します。

  6. OIDC プロバイダーが認可コードを使用してアプリにリダイレクトバックする

  7. アプリケーションは、認可コードをユーザープールと JSON ウェブトークンと交換します。

  8. アプリケーションは OIDC トークンを ID プールに送信し、一時的な AWS 認証情報を取得します。

  9. アプリケーションはウェブインターフェイスに結果パネルを表示します

    認証に成功すると、ウェブインターフェイスに結果パネルが表示され、これらを調べるには 2 つのオプションがあります。

    1. 認証情報のみの表示ボタン: API フローの詳細なしで生成された一時的な AWS 認証情報を直接表示する場合は、このボタンを選択します。

      { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T13:36:17-07:00" } }
    2. 詳細な API フローを表示するボタン: step-by-stepの API リクエストを表示する場合は、このボタンを選択します。

      • アプリは OIDC IdP でユーザーにサインインし、ID トークンを取得します。ID プールは、エンタープライズプロバイダーからの OIDC トークンを受け入れます。

        ID プロバイダー Cognito プロバイダーキー 目的
        OIDC プロバイダー example-provider.com/oauth2/default エンタープライズ IdPs からの OIDC ID トークン

        OIDC プロバイダーによる認証が成功すると、アプリケーションはトークンを含む OAuth 2.0 レスポンスを受け取ります。

        { "token_type": "Bearer", "expires_in": 3600, "access_token": "eyJraWQiOiJFWAMPLE......", "scope": "email openid profile", "id_token": "eyJraWQiOiJFWAMPLE......" }
      • GetId() ID プール ID と OIDC プロバイダートークンを含むLoginsマップを含む API リクエスト

        POST GetId { "AccountId": "111122223333", "IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "Logins": { "example-provider.com/oauth2/default": "eyJraWQiOiJFWAMPLE......" } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }
      • GetCredentialsForIdentity() が返IdentityIDされ、同じ Logins マップを持つ

        POST GetCredentialsForIdentity { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Logins": { "example-provider.com/oauth2/default": "eyJraWQiOiJFWAMPLE......" } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......" } }

何が起こったか: Amazon Cognito は、設定されたプロバイダーに対して OIDC トークンを検証し、IAM ロール (デフォルト、クレームベース、またはルールマップ) を選択し、 AWS STS ユーザーに代わって を呼び出しました。

OIDC authentication with basic flow

このセクションでは、OIDC ID プロバイダーを使用してユーザーにサインインし、基本フローを使用して Amazon Cognito ID プールの OIDC トークンを サービスを呼び出す AWS ための一時的な AWS 認証情報と交換する方法について説明します。

ID プールの基本フローで OIDC サインインを使用する
  1. デモアプリケーションで、インタラクティブデモセクションに移動します。

  2. 認証済みアクセスタブを選択します。

  3. 基本的なフロータブを選択します。

  4. OIDC プロバイダーでサインインを選択する

  5. エンタープライズ認証情報を使用してサインインを完了します。

  6. OIDC プロバイダーが認可コードを使用してアプリにリダイレクトバックする

  7. アプリケーションは認可コードをユーザープールと JSON ウェブトークンと交換します。

  8. アプリケーションは OIDC トークンを ID プールに送信し、一時的な AWS 認証情報を取得します。

  9. アプリケーションはウェブインターフェイスに結果パネルを表示します

    認証に成功すると、ウェブインターフェイスに結果パネルが表示され、これらを調べるには 2 つのオプションがあります。

    1. 認証情報のみの表示ボタン: API フローの詳細なしで生成された一時的な AWS 認証情報を直接表示する場合は、このボタンを選択します。

      { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......", "Expiration": "2025-08-12T13:36:17-07:00" } }
    2. 詳細な API フローの表示ボタン: step-by-step API リクエストを表示する場合は、このボタンを選択します。

      • アプリは OIDC IdP でユーザーにサインインし、ID トークンを取得します。ID プールは、エンタープライズプロバイダーからの OIDC トークンを受け入れます。

        ID プロバイダー Cognito プロバイダーキー 目的
        OIDC プロバイダー example-provider.com/oauth2/default エンタープライズ IdPs からの OIDC ID トークン

        OIDC プロバイダーによる認証が成功すると、アプリケーションはトークンを含む OAuth 2.0 レスポンスを受け取ります。

        { "token_type": "Bearer", "expires_in": 3600, "access_token": "eyJraWQiOiJFWAMPLE......", "scope": "openid email profile", "id_token": "eyJraWQiOiJFWAMPLE......" }
      • GetId() ID プール ID と OIDC プロバイダートークンを含むLoginsマップを含む API リクエスト

        POST GetId { "IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "Logins": { "example-provider.com/oauth2/default": "eyJraWQiOiJFWAMPLE......" } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222" }
      • GetOpenIdToken() 返された IdentityID と同じLoginsマップを持つ

        POST GetOpenIdToken { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Logins": { "example-provider.com/oauth2/default": "eyJraWQiOiJFWAMPLE......" } }

        レスポンス:

        { "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "Token": "eyJraWQiOiJFWAMPLE......" }
      • AssumeRoleWithWebIdentity() OpenID トークンを使用する

        POST AssumeRoleWithWebIdentity { "RoleArn": "arn:aws:iam::111122223333:role/Cognito_IdentityPoolAuth_Role", "WebIdentityToken": "eyJraWQiOiJFWAMPLE......" }

        レスポンス:

        { "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "FwoGZXIvYXdzEEXAMPLE......", "Expiration": "2025-08-12T14:36:17-07:00" } }

何が起こったか: Amazon Cognito は、設定されたプロバイダーに対して OIDC トークンを検証し、OpenID トークンを返しました。アプリケーションは AWS STS 直接 を呼び出して適切な IAM ロールを引き受け、有効期間の短い認証情報を受け取りました。

OIDC 認証を理解する

  • 標準ベース: OIDC は OAuth 2.0 上に構築されており、標準化された ID 情報を提供します。

  • トークンの検証: ID トークンの信頼性を検証できます。

  • クレームベースのアクセス: OIDC クレームは、ロールマッピングとアクセスコントロールに使用できます。

  • エンタープライズ統合: 一般的なエンタープライズ ID プロバイダーと連携します。

次のステップ

デモアプリケーションをセットアップして調べたので、次のことができます。

  • まだテストしていない追加の ID プロバイダーを設定する

  • 拡張認証と基本認証の両方を試して、その違いを理解します。

  • 独自のユースケースに合わせてデモをカスタマイズする

  • Amazon Cognito ID プールを独自のアプリケーションに統合します。