

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

# アイデンティティプールのサンプルアプリケーション
<a name="getting-started-identity-pools-application"></a>

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

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

[GitHub からサンプルアプリケーションをダウンロードする](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/cognito/scenarios/identity_pools_example_demo/web)

このサンプルアプリケーションでは、Amazon Cognito のアイデンティティプールの以下の機能について、わかりやすく説明します。

**アイデンティティプールの認証フロー**  
+ API リクエストの詳細な内訳を含む拡張認証フロー
+ API リクエストの詳細な内訳を含む基本認証フロー

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

**サポートされている ID プロバイダーとの統合**  
+ コンシューマーアクセス向けのソーシャル IdP (Facebook、Amazon、Twitter、Apple、Google)
+ 企業ユーザー向けのエンタープライズ IdP (OpenID Connect または SAML 経由)
+ Amazon Cognito ユーザープール

**AWS 認証情報管理**  
+ ID プロバイダートークンを一時的な AWS 認証情報と交換する
+ 一時的な認証情報を使用して AWS サービスに安全にアクセスする

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

![\[認証方法オプションとインタラクティブなデモセクションをメインページに表示する、Amazon Cognito アイデンティティプールのデモアプリケーションのウェブインターフェイスのスクリーンショット。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/amazon-cognito-identity-pool-demo-app.png)


**Topics**
+ [前提条件](#demo-prerequisites)
+ [認証プロバイダーの設定](#demo-authentication-provider-setup)
+ [デモアプリケーションをデプロイする](#demo-deploy-application)
+ [アイデンティティプールの認証方法を調べる](#explore-authentication-methods-in-identity-pools-application)
+ [次の手順](#next-steps)

## 前提条件
<a name="demo-prerequisites"></a>

始める前に、以下のリソースを設定する必要があります。
+ Amazon Cognito にアクセスできる AWS アカウント。 AWS アカウントをお持ちでない場合は、「」の手順に従います[の開始方法 AWS](cognito-getting-started-account-iam.md)。
+ Python 3.8 以降が開発コンピュータにインストールされていること。
+ GitHub へのアクセス権。
+ AWS Amazon Cognito APIs に認証されたリクエストを行うアクセス許可で設定された 認証情報。これらの認証情報は、[デベロッパーの認証](authentication-flow.md#authentication-flow-developer)に必要です。

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

## 認証プロバイダーの設定
<a name="demo-authentication-provider-setup"></a>

このアプリケーションで最良の結果を得るには、1 つ以上のサードパーティ ID プロバイダー (IdP) または Amazon Cognito ユーザープールをセットアップし、Amazon Cognito アイデンティティプールと統合します。前提条件を満たしたら、このデモアプリケーションを実行する前に、設定する ID プロバイダーを選択します。[Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/v2/identity/identity-pools)では、アイデンティティプールと ID プロバイダーを設定する手順を示しています。

**Amazon Cognito ユーザープール**  
+ [Amazon Cognito ユーザープールによる認証](authentication.md)
+ [アプリケーションクライアントによるアプリケーション固有の設定](user-pool-settings-client-apps.md)

**ソーシャル ID プロバイダー**  
+ Google: [アイデンティティプール IdP として Google を設定する](google.md)
+ Facebook: [アイデンティティプール IdP として Facebook を設定する](facebook.md)
+ Amazon: [アイデンティティプール IdP として Login with Amazon を設定する](amazon.md)

**OpenID Connect (OIDC) プロバイダー**  
+ [OIDC プロバイダーをアイデンティティプール IdP として設定する](open-id.md)

**SAML プロバイダー**  
+ [SAML プロバイダーをアイデンティティプール IdP として設定する](saml-identity-provider.md)

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

## デモアプリケーションをデプロイする
<a name="demo-deploy-application"></a>

### リポジトリをクローンします
<a name="demo-step-1-clone-repository"></a>

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

1. `aws-doc-sdk-examples` リポジトリのクローンを作成するか、[このフォルダをリポジトリから](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/cognito/scenarios/identity_pools_example_demo/web)取得します。

   ```
   git clone https://github.com/awsdocs/aws-doc-sdk-examples.git
   ```

1.  プロジェクトディレクトリに移動します。

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

### アイデンティティプールを作成する
<a name="demo-step-2-create-identity-pool"></a>

アプリケーションの Amazon Cognito アイデンティティプールを作成するには、「[アイデンティティプールコンソールの概要](identity-pools.md)」の手順に従います。

**デモアプリケーションのアイデンティティプールを設定するには**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)を開きます。

1. ナビゲーションペインで、**[アイデンティティプール]** を選択します。既存のアイデンティティプールを選択するか、新しいアイデンティティプールを作成します。

1. **[ユーザーアクセス]** で、**[認証されたアクセス]** と **[ゲストアクセス]** を有効にします。新規または既存の [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html)を設定し、各タイプのユーザーに付与する[アクセス許可をロールに割り当て](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)ます。

1. **[ユーザーアクセス]** で、設定する ID プロバイダーをセットアップします。

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

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

### アプリケーションを設定して実行する
<a name="demo-step-3-configure-run-application"></a>

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

**デモアプリケーションを設定するには**

1. `aws-doc-sdk-examples` クローンの `python/example_code/cognito/scenarios/identity_pools_example_demo/web` でコマンドラインを開きます。

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

   ```
   cp .env.example .env
   ```

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

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

   ```
   pip install -r requirements.txt
   ```

1. バックエンドサーバーを起動します。

   ```
   cd backend 
   python oauth_server.py
   ```

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

   ```
   cd frontend
   python -m http.server 8001
   ```

1. ブラウザでアプリケーションを開きます ([http://localhost:8001](http://localhost:8001))。ブラウザにデモアプリケーションのインターフェイスが表示され、アイデンティティプールの認証をテストする準備が整います。

## アイデンティティプールの認証方法を調べる
<a name="explore-authentication-methods-in-identity-pools-application"></a>

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

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

**[認証されていない (ゲスト) アクセス](#unauthenticated-access)**  
まだ認証されていないユーザーに AWS 認証情報を提供します。

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

## 認証されていない (ゲスト) アクセス
<a name="unauthenticated-access"></a>

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

認証を必要とせずに AWS への限定的なアクセスをユーザーに提供する方法に関心がある場合は、このまま読み進めてください。ゲストアクセスを実装したら、匿名ユーザーに AWS 認証情報を安全に提供し、2 つの認証フローの違いを理解する方法について説明します。

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

------
#### [ Guest access with enhanced flow ]

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

**拡張フローでゲストアクセスをテストするには**

1. デモアプリケーションで、**[インタラクティブデモ]** セクションに移動します。

1. **[ゲストアクセス]** タブを選択します。

1. **[拡張フロー]** タブを選択します。

1. **[ゲストアクセスをテスト]** を選択します。

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

1. 認証が成功すると、ウェブインターフェイスに **[結果]** パネルが表示されます。結果は、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"
        }
      }
      ```

   1. **[詳細な API フローを表示]** ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
      + `identityPoolId` を使用した `GetId()` API リクエスト。ゲストアクセスに認証トークンは必要ありません

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

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

        ```
        {
          "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
        ```
      + 返された `identityPoolId` を含む `GetCredentialsForIdentity()`。

        ```
        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. デモアプリケーションで、**[インタラクティブデモ]** セクションに移動します。

1. **[ゲストアクセス]** タブを選択します。

1. **[基本フロー]** タブを選択します。

1. **[ゲストアクセスをテスト]** を選択します。

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

1. 認証に成功すると、ウェブインターフェイスに **[結果]** パネルが表示されます。結果は、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"
        }
      }
      ```

   1. **[詳細な API フローを表示]** ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
      +  アイデンティティプール ID を使用した `GetId()` API リクエスト。ゲストアクセスに認証トークンは必要ありません。

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

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

        ```
        {
           "IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
        }
        ```
      +  返された `IdentityID` および同じ `Logins` マップを含む `GetOpenIdToken()`

        ```
        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 から、この `IdentityId` を表す有効期間の短い OpenID Connect ウェブ ID トークンを発行します。トークンには、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 認証情報を返します。

------

### 一時的な認証情報を使用する
<a name="use-temporary-credentials"></a>

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

以下の例は完全なリストではありませんが、アイデンティティプールのゲスト機能でユーザーエクスペリエンスを改善できる一般的な方法を示しています。

#### 公開の読み取り専用コンテンツ
<a name="public-content"></a>

以下の例では、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'
}));
```

------

### 「ログイン前に試す」機能
<a name="try-before-login"></a>

以下の例では、ゲストユーザーとして 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
}));
```

------

## ソーシャル ID プロバイダーの認証
<a name="social-identity-provider-authentication"></a>

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

アイデンティティプール自体は、ユーザーディレクトリではありません。パスワードやプロファイルフィールドは保存されません。代わりに、ユーザーの認証を外部 IdP に委託し、IAM ロールの認証情報を提供することで、認証済みのユーザーが AWS のサービスを直接呼び出すことを承認することに重点を置いています。

------
#### [ Social identity provider with enhanced flow ]

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

**サンプルアプリケーションの拡張フローでソーシャルサインインを使用する**

1. デモアプリケーションで、**[インタラクティブデモ]** セクションに移動します。

1. **[認証されたアクセス]** タブを選択します。

1. **[拡張フロー]** タブを選択します。

1. 設定したサポート対象ソーシャルプロバイダー (**Google でサインイン**、**Facebook でサインイン**、**Amazon でログイン**など) を選択します。

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

1. プロバイダーは、アプリケーションのリダイレクト URI にリダイレクトされます。

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

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

   認証が成功すると、ウェブインターフェイスに **[結果]** パネルが表示されます。結果は、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"
        }
      }
      ```

   1. **[詳細な API フローを表示]** ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
      +  アプリケーションは、ソーシャル IdP を使用してユーザーをサインインさせ、プロバイダートークンを取得します。アイデンティティプールは、ソーシャルプロバイダーから以下のアーティファクトを受け入れます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/getting-started-identity-pools-application.html)

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

        ```
        {
           "access_token": "ya29.A0AS3H6NEXAMPLE......",
           "expires_in": 3599,
           "scope": "openid https://www.examplesocial....",
           "token_type": "Bearer",
           "id_token": "eyJhbGciOiJSUzI1NiIsEXAMPLE......"
        }
        ```
      +  アイデンティティプール ID と `Logins` マップ (ソーシャルプロバイダートークンを含む) を使用した `GetId()` 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"
        }
        ```
      + 返された `IdentityID` および同じ `Logins` マップを含む `GetCredentialsForIdentity()`

        ```
        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 を呼び出しました。次に、アイデンティティプールから一時的な認証情報が返されました。

------
#### [ Social identity provider with basic flow ]

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

**サンプルアプリケーションの基本フローでソーシャルサインインを使用する**

1. デモアプリケーションで、**[インタラクティブデモ]** セクションに移動します。

1. **[認証されたアクセス]** タブを選択します。

1. **[基本フロー]** タブを選択します。

1. 設定したサポート対象ソーシャルプロバイダー (**Google でサインイン**、**Facebook でサインイン**、**Amazon でログイン**など) を選択します。

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

1. プロバイダーは、アプリケーションのリダイレクト URI にリダイレクトされます。

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

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

   認証が成功すると、ウェブインターフェイスに **[結果]** パネルが表示されます。結果は、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"
        }
      }
      ```

   1. **[詳細な API フローを表示]** ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
      +  アプリケーションは、ソーシャル IdP を使用してユーザーをサインインさせ、プロバイダートークンを取得します。アイデンティティプールは、ソーシャルプロバイダーから以下のアーティファクトを受け入れます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/getting-started-identity-pools-application.html)

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

        ```
        {
           "access_token": "ya29.A0AS3H6NEXAMPLE......",
           "expires_in": 3599,
           "scope": "openid https://www.examplesocial....",
           "token_type": "Bearer",
           "id_token": "eyJhbGciOiJSUzI1NiIsEXAMPLE......"
        }
        ```
      +  アイデンティティプール ID と `Logins` マップ (ソーシャルプロバイダートークンを含む) を使用した `GetId()` 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"
        }
        ```
      +  返された `IdentityID` および同じ Logins マップを含む `GetOpenIdToken()`

        ```
        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......"
        }
        ```
      +  OpenID トークンを含む `AssumeRoleWithWebIdentity()`

        ```
        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 ロールを引き受け、一時的な認証情報を受け取ります。

------

### ソーシャルアクセスを理解する
<a name="understand-social-access"></a>
+ ソーシャルユーザーは、ソーシャルプロバイダーで認証した後、Amazon Cognito ID プールを通じて一時的な AWS 認証情報を受け取ります。
+ 認証された各ユーザーは、セッション間で保持される一意のアイデンティティ ID を取得します。
+ これらの認証情報は、認証されたアクセス用に特別に設計された IAM ロールにリンクされ、ゲストアクセスよりも広範なアクセス許可を提供します。
+ ソーシャルプロバイダートークンは AWS 認証情報と交換され、ユーザー ID とアクセス許可が維持されます。

## Amazon Cognito ユーザープールの認証
<a name="user-pool-authentication"></a>

このステップでは、ユーザープールの[マネージドログイン](cognito-user-pools-managed-login.md)統合による Amazon Cognito 認証について説明します。ユーザープールを IdP としてアイデンティティプールにリンクすると、ユーザープールトークンは、アイデンティティプールが一時的な認証情報を発行することを許可します。

------
#### [ User pool authentication with enhanced flow ]

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

**アイデンティティプールの拡張フローで Amazon Cognito ユーザープール認証を使用する**

1. デモアプリケーションで、**[インタラクティブデモ]** セクションに移動します。

1. **[認証されたアクセス]** タブを選択します。

1. **[拡張フロー]** タブを選択します。

1. **[Amazon Cognito ユーザープールでサインイン]** を選択します。

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

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

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

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

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

   認証が成功すると、ウェブインターフェイスに **[結果]** パネルが表示されます。結果は、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"
        }
      }
      ```

   1. **[詳細な API フローを表示]** ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
      +  アプリケーションは、Amazon Cognito でユーザーをサインインさせます。ユーザープールによる認証が成功すると、アプリケーションは ID トークン (JWT) を含む OAuth 2.0 レスポンスを受け取ります。アイデンティティプールは、次のプロバイダーキー形式を使用してユーザープールから JWT ID トークンを受け入れます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/getting-started-identity-pools-application.html)

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

        ```
        {
           "id_token": "eyJraWQiOiJFWAMPLE......",
           "token_type": "Bearer",
           "expires_in": 3600
        }
        ```
      +  `identityPoolId`と `Logins` マップ (`id_token` にマッピングされたユーザープールのプロバイダーキーを含む) を使用した `GetId()` API リクエスト。Amazon Cognito は、ユーザープール ID トークンの署名、発行者、有効期限、オーディエンス (`aud`) が、アイデンティティプールでこのユーザープール IdP に登録したアプリケーションクライアント ID の 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"
        }
        ```
      +  返された `identityPoolId` および同じ `Logins` マップ (`id_token` を含む) を含む `GetCredentialsForIdentity()`。Amazon Cognito は、ユーザープール ID トークンの署名、発行者、有効期限、オーディエンス (`aud`) が、アイデンティティプールでこのユーザープール IdP に登録したアプリケーションクライアント ID の 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、rules、または default) を選択して、 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 リクエストを使用して、認証プロセスをきめ細かく制御できます。

**アイデンティティプールの基本フローで Amazon Cognito ユーザープール認証を使用する**

1. デモアプリケーションで、**[インタラクティブデモ]** セクションに移動します。

1. **[認証されたアクセス]** タブを選択します。

1. **[基本フロー]** タブを選択します。

1. **[Amazon Cognito ユーザープールでサインイン]** を選択します。

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

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

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

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

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

   認証が成功すると、ウェブインターフェイスに **[結果]** パネルが表示されます。結果は、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"
        }
      }
      ```

   1. **[詳細な API フローを表示]** ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
      + アプリケーションは Amazon Cognito ユーザープールでユーザーをサインインさせ、アーティファクトとして ID トークン (JWT) を取得します。ユーザープールによる認証が成功すると、アプリケーションは ID トークン (JWT) を含む OAuth レスポンスを受け取ります。アイデンティティプールは、このトークンを認証に使用します。

        ```
        {
           "id_token": "eyJraWQiOiJFWAMPLE......",
           "token_type": "Bearer",
           "expires_in": 3600
        }
        ```
      + アイデンティティプール ID と `Logins` マップ (ユーザープールのプロバイダーキーと ID トークンを値として含む) を使用した `GetId()` API リクエスト。Amazon Cognito は、ユーザープール ID トークンの署名、有効期限、オーディエンス (aud) が、アイデンティティプールでこのユーザープール IdP に登録したアプリケーションクライアント ID の 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"
        }
        ```
      + 返された `IdentityID` および同じ `Logins` マップを含む `GetOpenIdToken()`

        ```
        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 から、この `IdentityId` を表す有効期間の短い OpenID Connect ウェブ ID トークンを発行します。トークンには、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 は検証チェックを実行し、認証情報を発行しました。

------

### ユーザープールへのアクセスを理解する
<a name="understand-user-pool-access"></a>
+ ユーザープールのユーザーは、Amazon Cognito ID プールを通じて一時的な AWS 認証情報を受け取ります。
+ これらの認証情報は、アイデンティティプール設定で指定した IAM ロールにリンクされています。
+ ユーザープール ID トークンは、ID プールを介して AWS 認証情報と交換されます。

## SAML 認証
<a name="saml-authentication"></a>

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

------
#### [ SAML authentication with enhanced flow ]

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

**アイデンティティプールの拡張フローで SAML 認証を使用する**

1. デモアプリケーションで、**[インタラクティブデモ]** セクションに移動します。

1. **[認証されたアクセス]** タブを選択します。

1. **[拡張フロー]** タブを選択します。

1. **[SAML プロバイダーでサインイン]** を選択します。

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

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

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

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

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

   認証が成功すると、ウェブインターフェイスに **[結果]** パネルが表示されます。結果は、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"
        }
      }
      ```

   1. **[詳細な API フローを表示]** ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
      +  アプリケーションは、SAML IdP を使用してユーザーをサインインさせ、SAML レスポンスを取得します。アイデンティティプールは、SAML プロバイダー ARN をキーとして使用し、エンタープライズプロバイダーからの SAML アサーションを受け入れます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/getting-started-identity-pools-application.html)

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

        ```
        {
          "saml_response": "PD94bWwgdmVyc2lvbj0iMS4wIiBFWAMPLE...",
          "provider_arn": "arn:aws:iam::111122223333:saml-provider/EXAMPLE",
          "status": "Authentication successful"
        }
        ```
      +  アイデンティティプール ID と `Logins` マップ (SAML プロバイダー ARN とアサーションを含む) を使用した `GetId()` 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"
        }
        ```
      +  返された `IdentityID` および同じ `Logins` マップを含む `GetCredentialsForIdentity()`。

        ```
        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 へのアクセスを理解する
<a name="understand-saml-access"></a>
+ エンタープライズユーザーは、SAML プロバイダーで認証した後、Amazon Cognito ID プールから一時的な AWS 認証情報を受け取ります。
+ 認証された各ユーザーは、セッション間で保持される一意のアイデンティティ ID を取得します。
+ これらの認証情報は、認証されたアクセス用に特別に設計された IAM ロールにリンクされ、ゲストアクセスよりも広範なアクセス許可を提供します。
+ SAML アサーションは AWS 認証情報と交換され、ユーザー ID とエンタープライズ属性が維持されます。

## OpenID Connect (OIDC) 認証
<a name="oidc-authentication"></a>

このステップでは、エンタープライズ 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 出す方法を示します。

**アイデンティティプールの拡張フローで OIDC サインインを使用する**

1. デモアプリケーションで、**[インタラクティブデモ]** セクションに移動します。

1. **[認証されたアクセス]** タブを選択します。

1. **[拡張フロー]** タブを選択します。

1. **[OIDC プロバイダーへのサインイン]** を選択します。

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

1. OIDC プロバイダーは、認可コードをアプリケーションにリダイレクトします。

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

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

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

   認証が成功すると、ウェブインターフェイスに **[結果]** パネルが表示されます。結果は、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"
        }
      }
      ```

   1. **[詳細な API フローを表示]** ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
      +  アプリケーションは OIDC IdP を使用してユーザーをサインインさせ、ID トークンを取得します。アイデンティティプールは、エンタープライズプロバイダーからの OIDC トークンを受け入れます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/getting-started-identity-pools-application.html)

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

        ```
        {
          "token_type": "Bearer",
          "expires_in": 3600,
          "access_token": "eyJraWQiOiJFWAMPLE......",
          "scope": "email openid profile",
          "id_token": "eyJraWQiOiJFWAMPLE......"
        }
        ```
      +  アイデンティティプール ID と `Logins` マップ (OIDC プロバイダートークンを含む) を使用した `GetId()` 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"
        }
        ```
      +  返された `IdentityID` および同じ Logins マップを含む `GetCredentialsForIdentity()`

        ```
        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 出す方法を示します。

**アイデンティティプールの基本フローで OIDC サインインを使用する**

1. デモアプリケーションで、**[インタラクティブデモ]** セクションに移動します。

1. **[認証されたアクセス]** タブを選択します。

1. **[基本フロー]** タブを選択します。

1. **[OIDC プロバイダーへのサインイン]** を選択します。

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

1. OIDC プロバイダーは、認可コードをアプリケーションにリダイレクトします。

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

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

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

   認証が成功すると、ウェブインターフェイスに **[結果]** パネルが表示されます。結果は、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"
        }
      }
      ```

   1. **[詳細な API フローを表示]** ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
      +  アプリケーションは OIDC IdP を使用してユーザーをサインインさせ、ID トークンを取得します。アイデンティティプールは、エンタープライズプロバイダーからの OIDC トークンを受け入れます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/getting-started-identity-pools-application.html)

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

        ```
        {
          "token_type": "Bearer",
          "expires_in": 3600,
          "access_token": "eyJraWQiOiJFWAMPLE......",
          "scope": "openid email profile",
          "id_token": "eyJraWQiOiJFWAMPLE......"
        }
        ```
      +  アイデンティティプール ID と `Logins` マップ (OIDC プロバイダートークンを含む) を使用した `GetId()` 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"
        }
        ```
      +  返された IdentityID および同じ `Logins` マップを含む `GetOpenIdToken()`。

        ```
        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......"
        }
        ```
      +  OpenID トークンを含む `AssumeRoleWithWebIdentity()`

        ```
        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 認証を理解する
<a name="understand-oidc-authentication"></a>
+ 標準ベース: OIDC は OAuth 2.0 上に構築され、標準化された ID 情報を提供します。
+ トークンの検証: ID トークンの信頼性を検証できます。
+ クレームベースのアクセス: OIDC クレームは、ロールマッピングとアクセスコントロールに使用できます。
+ エンタープライズ統合: 一般的なエンタープライズ ID プロバイダーと連携します。

## 次の手順
<a name="next-steps"></a>

デモアプリケーションをセットアップして確認したら、以下のことができます。
+ まだテストしていない追加の ID プロバイダーを設定する
+ 拡張認証と基本認証の両方を試して、その違いを理解する
+ 独自のユースケースに合わせてデモをカスタマイズする
+ Amazon Cognito アイデンティティプールを独自のアプリケーションに統合する