翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
アイデンティティプールのサンプルアプリケーション
Amazon Cognito のアイデンティティプールの最も一般的なユースケースは、複数のサインインシステムからユーザーをフェデレーションして、アクセスが制限された一時的な AWS 認証情報をクライアントに直接配信することです。これにより、AWS リソースへのアクセス許可を得るために認証情報ブローカーを構築する必要がなくなります。例えば、モバイルアプリで Amazon S3 からソーシャルメディアアカウントを使用してサインインし、アプリアセットにアクセスすることをユーザーに許可する必要が生じることがあります。アイデンティティプールは、ユーザープールでサインインするユーザーに認証情報も配信します。
このチュートリアルでは、アイデンティティプールでサポートされている ID プロバイダー (IdP) を使用して、拡張および基本認証フローで一時的な認証済み認証情報とゲスト認証情報を取得できるウェブアプリケーションを作成します。ウェブ開発の経験がある場合は、GitHub からサンプルアプリケーションをダウンロードしてください。
GitHub からサンプルアプリケーションをダウンロードする
このサンプルアプリケーションでは、Amazon Cognito のアイデンティティプールの以下の機能について、わかりやすく説明します。
- アイデンティティプールの認証フロー
-
- ゲスト (認証されていない) アクセスの実装
-
- サポートされている ID プロバイダーとの統合
-
-
コンシューマーアクセス向けのソーシャル IdP (Facebook、Amazon、Twitter、Apple、Google)
-
企業ユーザー向けのエンタープライズ IdP (OpenID Connect または SAML 経由)
-
Amazon Cognito user pools
- AWS 認証情報の管理
-
開発用ウェブサーバーでアプリケーションを設定し、ブラウザからアクセスすると、以下のオプションが表示されます。
前提条件
始める前に、以下のリソースを設定する必要があります。
-
Amazon Cognito にアクセスできる AWS アカウント。AWS アカウントを持っていない場合は、「の開始方法 AWS」の手順に従ってください。
-
Python 3.8 以降が開発コンピュータにインストールされていること。
-
GitHub へのアクセス権。
-
Amazon Cognito API に対して認証されたリクエストを行うためのアクセス許可が設定された AWS 認証情報。これらの認証情報は、デベロッパーの認証に必要です。
特定の SDK における AWS 認証情報とアイデンティティプールのフェデレーションの実装の詳細については、「認証情報の取得」を参照してください。
認証プロバイダーの設定
このアプリケーションで最良の結果を得るには、1 つ以上のサードパーティ ID プロバイダー (IdP) または Amazon Cognito ユーザープールをセットアップし、Amazon Cognito アイデンティティプールと統合します。前提条件を満たしたら、このデモアプリケーションを実行する前に、設定する ID プロバイダーを選択します。Amazon Cognito コンソールでは、アイデンティティプールと ID プロバイダーを設定する手順を示しています。
- Amazon Cognito user pools
-
- ソーシャル ID プロバイダー
-
- OpenID Connect (OIDC) プロバイダー
-
- SAML プロバイダー
-
このデモアプリケーションでは、サポートされているすべての ID プロバイダーをセットアップする必要はありません。ユースケースに合ったものから開始できます。各リンクには、詳細な設定手順が記載されています。
デモアプリケーションをデプロイする
リポジトリをクローンする
-
ターミナルウィンドウを開きます。
-
aws-doc-sdk-examples リポジトリのクローンを作成するか、このフォルダをリポジトリから取得します。
git clone https://github.com/awsdocs/aws-doc-sdk-examples.git
-
プロジェクトディレクトリに移動します。
cd python/example_code/cognito/scenarios/identity_pools_example_demo/web
アイデンティティプールを作成する
アプリケーションの Amazon Cognito アイデンティティプールを作成するには、「アイデンティティプールコンソールの概要」の手順に従います。
デモアプリケーションのアイデンティティプールを設定するには
-
Amazon Cognito コンソールを開きます。
-
ナビゲーションペインで、[アイデンティティプール] を選択します。既存のアイデンティティプールを選択するか、新しいアイデンティティプールを作成します。
-
[ユーザーアクセス] で、[認証されたアクセス] と [ゲストアクセス] を有効にします。新規または既存の IAM ロールを設定し、各タイプのユーザーに付与するアクセス許可をロールに割り当てます。
-
[ユーザーアクセス] で、設定する ID プロバイダーをセットアップします。
-
[ID プールのプロパティ] で、[基本 (クラシック) 認証] を有効にします。
-
ブラウザでアイデンティティプールのコンソールを開いたままにします。アイデンティティプール ID とその他の設定情報は、アプリケーションのセットアップで使用します。
次の手順では、デモアプリケーションの初期セットアップについて説明します。
デモアプリケーションを設定するには
-
aws-doc-sdk-examples クローンの python/example_code/cognito/scenarios/identity_pools_example_demo/web でコマンドラインを開きます。
-
サンプル環境ファイルをコピーして .env ファイルを作成します。
cp .env.example .env
-
テキストエディタで .env ファイルを開きます。ファイル内のサンプル値を独自の設定値に置き換えます。
-
バックエンドの依存関係をインストールします。
pip install -r requirements.txt
-
バックエンドサーバーを起動します。
cd backend
python oauth_server.py
-
新しいターミナルウィンドウを開き、プロジェクトディレクトリに移動して、フロントエンドサーバーを起動します。
cd frontend
python -m http.server 8001
-
ブラウザでアプリケーションを開きます (http://localhost:8001)。ブラウザにデモアプリケーションのインターフェイスが表示され、アイデンティティプールの認証をテストする準備が整います。
アイデンティティプールの認証方法を調べる
このセクションでは、Amazon Cognito アイデンティティプールのデモアプリケーションを使用した基本認証フローと拡張認証フローについて説明します。このデモでは、アイデンティティプールがさまざまな ID プロバイダーと連携して、アプリケーションユーザーに一時的な AWS 認証情報を提供する方法について説明します。
サンプルアプリケーションの [インタラクティブデモ] セクションで、まずアイデンティティプールでサポートされている 2 種類のアクセスから選択します。
- 認証されていない (ゲスト) アクセス
-
まだ認証されていないユーザーに AWS 認証情報を提供します。
- 認証されたアクセス
-
ID プロバイダーのトークンを、使用可能なすべてのアクセス許可を持つ AWS 認証情報と交換します。.env ファイルで設定した ID プロバイダーから 1 つを選択します。
このステップでは、アイデンティティプールのゲストアクセス機能を使用して、認証されていない (ゲスト) ユーザーの一時的な AWS 認証情報を取得する方法を示します。デモアプリケーションでは、拡張フローと基本フローの両方をテストして、ユーザーのサインインを必要とせずに、アイデンティティプールが認証情報を発行する方法を確認します。ゲストアクセスは、認証されたアクセスと同じ API シーケンスを使用しますが、ID プロバイダーのトークン (Google、Facebook、またはエンタープライズプロバイダーからの SAML アサーションなど) からの OAuth トークンなど) は提供しません。
認証を必要とせずに AWS への限定的なアクセスをユーザーに提供する方法に関心がある場合は、このまま読み進めてください。ゲストアクセスを実装したら、匿名ユーザーに AWS 認証情報を安全に提供する方法と、2 つの認証フロー間の違いについて説明します。
認証されていないアクセスは、インターネットにアクセスできるすべてのユーザーに認証情報を発行できるため、パブリック API やグラフィックアセットなど、最小限のセキュリティを必要とする AWS リソースに最適です。このステップに進む前に、ゲストアクセスを有効にしてアイデンティティプールを設定しているかと、適切な IAM ポリシーを設定してアクセス許可を制限しているかを確認してください。
- Guest access with enhanced flow
-
拡張フローは、2 つの API リクエストを使用して、認証されていないユーザーの AWS 認証情報を取得する合理的なアプローチです。
拡張フローでゲストアクセスをテストするには
-
デモアプリケーションで、[インタラクティブデモ] セクションに移動します。
-
[ゲストアクセス] タブを選択します。
-
[拡張フロー] タブを選択します。
-
[ゲストアクセスをテスト] を選択します。
-
アプリケーションは、追加の認証プロンプトなしでアイデンティティプールから一時的な AWS 認証情報を取得します。
-
認証が成功すると、ウェブインターフェイスに [結果] パネルが表示されます。結果は、2 つのオプションを使用して参照できます。
-
[認証情報のみを表示] ボタン: 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"
}
}
-
[詳細な 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 リクエストを使用して、認証プロセスをきめ細かく制御できます。
基本フローでゲストアクセスをテストするには
-
デモアプリケーションで、[インタラクティブデモ] セクションに移動します。
-
[ゲストアクセス] タブを選択します。
-
[基本フロー] タブを選択します。
-
[ゲストアクセスをテスト] を選択します。
-
アプリケーションは、追加の認証プロンプトなしでアイデンティティプールから一時的な AWS 認証情報を取得します。
-
認証に成功すると、ウェブインターフェイスに [結果] パネルが表示されます。結果は、2 つのオプションを使用して参照できます。
-
[認証情報のみを表示] ボタン: 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"
}
}
-
[詳細な 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) や 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 認証情報として機能しますが、アイデンティティプールの認証されていない IAM ロールによって定義されたアクセス許可は制限されます。任意の AWS SDK または AWS CLI で使用できます。認証情報を使用した AWS SDK の設定の詳細については、「AWS SDK とツールのリファレンスガイド」で「標準化された認証情報プロバイダー」を参照してください。
以下の例は完全なリストではありませんが、アイデンティティプールのゲスト機能でユーザーエクスペリエンスを改善できる一般的な方法を示しています。
以下の例では、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 フェデレーション管理を通じてセキュリティを維持しながら、使い慣れたサインインエクスペリエンスを提供します。Google、Facebook、Amazon などのソーシャル ID プロバイダー (IdP) からサインインし、その IdP トークンを一時的な AWS 認証情報と交換できます。Twitter と Apple の統合も、アイデンティティプールでサポートされていますが、サンプルアプリケーションではサポートされていません。
アイデンティティプール自体は、ユーザーディレクトリではありません。パスワードやプロファイルフィールドは保存されません。代わりに、ユーザーの認証を外部 IdP に委託し、IAM ロールの認証情報を提供することで、認証済みのユーザーが AWS のサービスを直接呼び出すことを承認することに重点を置いています。
- Social identity provider with enhanced flow
-
このセクションでは、ソーシャル ID プロバイダーを使用してユーザーをサインインさせる方法と、拡張フローを使用して Amazon Cognito アイデンティティプールのプロバイダートークンを一時的な認証情報と交換して AWS リソースをリクエストする方法について説明します。
サンプルアプリケーションの拡張フローでソーシャルサインインを使用する
-
デモアプリケーションで、[インタラクティブデモ] セクションに移動します。
-
[認証されたアクセス] タブを選択します。
-
[拡張フロー] タブを選択します。
-
設定したサポート対象ソーシャルプロバイダー (Google でサインイン、Facebook でサインイン、Amazon でログインなど) を選択します。
-
サインインして、ユーザーデータをアプリケーションと共有することに同意します。
-
プロバイダーは、アプリケーションのリダイレクト URI にリダイレクトされます。
-
アプリケーションは、プロバイダートークンをアイデンティティプールに送信し、一時的な AWS 認証情報を取得します。
-
アプリケーションは、ウェブインターフェイスに [結果] パネルを表示します。
認証が成功すると、ウェブインターフェイスに [結果] パネルが表示されます。結果は、2 つのオプションを使用して参照できます。
-
[認証情報のみを表示] ボタン: 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"
}
}
-
[詳細な API フローを表示] ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
-
アプリケーションは、ソーシャル IdP を使用してユーザーをサインインさせ、プロバイダートークンを取得します。アイデンティティプールは、ソーシャルプロバイダーから以下のアーティファクトを受け入れます。
| ID プロバイダー |
Cognito プロバイダーキー |
目的 |
| Google |
accounts.google.com |
Google Sign-In からの OAuth 2.0 トークン |
| Facebook |
graph.facebook.com |
Facebook でログインからのアクセストークン |
| Amazon |
www.amazon.com |
Amazon でログインからの OAuth トークン |
ソーシャルプロバイダーとの認証が成功すると、アプリケーションはアクセストークンとその他の認証詳細を含む 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 アイデンティティプールのプロバイダートークンを一時的な認証情報と交換し、AWS のサービスを呼び出す方法について説明します。
サンプルアプリケーションの基本フローでソーシャルサインインを使用する
-
デモアプリケーションで、[インタラクティブデモ] セクションに移動します。
-
[認証されたアクセス] タブを選択します。
-
[基本フロー] タブを選択します。
-
設定したサポート対象ソーシャルプロバイダー (Google でサインイン、Facebook でサインイン、Amazon でログインなど) を選択します。
-
サインインして、ユーザーデータをアプリケーションと共有することに同意します。
-
プロバイダーは、アプリケーションのリダイレクト URI にリダイレクトされます。
-
アプリケーションは、プロバイダートークンをアイデンティティプールに送信し、一時的な AWS 認証情報を取得します。
-
アプリケーションは、ウェブインターフェイスに [結果] パネルを表示します。
認証が成功すると、ウェブインターフェイスに [結果] パネルが表示されます。結果は、2 つのオプションを使用して参照できます。
-
[認証情報のみを表示] ボタン: 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"
}
}
-
[詳細な API フローを表示] ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
-
アプリケーションは、ソーシャル IdP を使用してユーザーをサインインさせ、プロバイダートークンを取得します。アイデンティティプールは、ソーシャルプロバイダーから以下のアーティファクトを受け入れます。
| ID プロバイダー |
Cognito プロバイダーキー |
目的 |
| Google |
accounts.google.com |
Google Sign-In からの OAuth 2.0 トークン |
| Facebook |
graph.facebook.com |
Facebook でログインからのアクセストークン |
| Amazon |
www.amazon.com |
Amazon でログインからの OAuth トークン |
ソーシャルプロバイダーとの認証が成功すると、アプリケーションはアクセストークンとその他の認証詳細を含む 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 ロールを引き受け、一時的な認証情報を受け取りました。
ソーシャルアクセスを理解する
-
ソーシャルユーザーは、ソーシャルプロバイダーで認証した後、Amazon Cognito アイデンティティプールを通じて一時的な AWS 認証情報を受け取ります。
-
認証された各ユーザーは、セッション間で保持される一意のアイデンティティ ID を取得します。
-
これらの認証情報は、認証されたアクセス用に特別に設計された IAM ロールにリンクされ、ゲストアクセスよりも広範なアクセス許可を提供します。
-
ソーシャルプロバイダートークンは、AWS 認証情報と交換され、ユーザー ID とアクセス許可が維持されます。
このステップでは、ユーザープールのマネージドログイン統合による Amazon Cognito 認証について説明します。ユーザープールを IdP としてアイデンティティプールにリンクすると、ユーザープールトークンは、アイデンティティプールが一時的な認証情報を発行することを許可します。
- User pool authentication with enhanced flow
-
拡張フローは、単一の API リクエストで Amazon Cognito アイデンティティプールを介して AWS 認証情報を取得するための効率的なアプローチを提供します。
アイデンティティプールの拡張フローで Amazon Cognito ユーザープール認証を使用する
-
デモアプリケーションで、[インタラクティブデモ] セクションに移動します。
-
[認証されたアクセス] タブを選択します。
-
[拡張フロー] タブを選択します。
-
[Amazon Cognito ユーザープールでサインイン] を選択します。
-
マネージドログインでユーザー名とパスワードを使用してサインインを完了します。
-
ユーザープールは、認可コードをアプリケーションのリダイレクト URI にリダイレクトします。
-
アプリケーションは、ユーザープールの認可コードを JSON ウェブトークンと交換します。
-
アプリケーションは、アイデンティティプールの ID トークンを一時的な AWS 認証情報と交換します。
-
アプリケーションはウェブインターフェイスに [結果] パネルを表示します。
認証が成功すると、ウェブインターフェイスに [結果] パネルが表示されます。結果は、2 つのオプションを使用して参照できます。
-
[認証情報のみを表示] ボタン: 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"
}
}
-
[詳細な API フローを表示] ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
-
アプリケーションは、Amazon Cognito でユーザーをサインインさせます。ユーザープールによる認証が成功すると、アプリケーションは ID トークン (JWT) を含む OAuth 2.0 レスポンスを受け取ります。アイデンティティプールは、次のプロバイダーキー形式を使用してユーザープールから 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
}
-
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 ユーザープール認証を使用する
-
デモアプリケーションで、[インタラクティブデモ] セクションに移動します。
-
[認証されたアクセス] タブを選択します。
-
[基本フロー] タブを選択します。
-
[Amazon Cognito ユーザープールでサインイン] を選択します。
-
マネージドログインでユーザー名とパスワードを使用してサインインを完了します。
-
ユーザープールは、認可コードをアプリケーションのリダイレクト URI にリダイレクトします。
-
アプリケーションは、ユーザープールの認可コードを JSON ウェブトークンと交換します。
-
アプリケーションは、アイデンティティプールの ID トークンを一時的な AWS 認証情報と交換します。
-
アプリケーションはウェブインターフェイスに [結果] パネルを表示します。
認証が成功すると、ウェブインターフェイスに [結果] パネルが表示されます。結果は、2 つのオプションを使用して参照できます。
-
[認証情報のみを表示] ボタン: 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"
}
}
-
[詳細な 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) や 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 アイデンティティプールを通じて一時的な AWS 認証情報を受け取ります。
-
これらの認証情報は、アイデンティティプール設定で指定した IAM ロールにリンクされています。
-
ユーザープール ID トークンは、アイデンティティプールを通じて AWS 認証情報と交換されます。
このステップでは、SAML 認証について説明します。ユーザーは、SAML をサポートするエンタープライズ ID プロバイダーを使用してサインインし、AWS のサービスにアクセスできます。SAML を使用した基本フローは、サンプルアプリケーションではサポートされていません。
- SAML authentication with enhanced flow
-
このセクションでは、SAML ID プロバイダーを使用してユーザーをサインインさせる方法と、拡張フローを使用して Amazon Cognito アイデンティティプールの SAML アサーションを一時的な AWS 認証情報と交換し、AWS のサービスを呼び出す方法について説明します。
アイデンティティプールの拡張フローで SAML 認証を使用する
-
デモアプリケーションで、[インタラクティブデモ] セクションに移動します。
-
[認証されたアクセス] タブを選択します。
-
[拡張フロー] タブを選択します。
-
[SAML プロバイダーでサインイン] を選択します。
-
エンタープライズ認証情報を使用してサインインを完了します。
-
ユーザープールは、SAML アサーションをアプリケーションのリダイレクト URI にリダイレクトします。
-
アプリケーションは、ユーザープールの認可コードを JSON ウェブトークンと交換します。
-
アプリケーションは、アイデンティティプールの SAML レスポンスを一時的な AWS 認証情報と交換します。
-
アプリケーションはウェブインターフェイスに [結果] パネルを表示します。
認証が成功すると、ウェブインターフェイスに [結果] パネルが表示されます。結果は、2 つのオプションを使用して参照できます。
-
[認証情報のみを表示] ボタン: 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"
}
}
-
[詳細な API フローを表示] ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
-
アプリケーションは、SAML IdP を使用してユーザーをサインインさせ、SAML レスポンスを取得します。アイデンティティプールは、SAML プロバイダー ARN をキーとして使用し、エンタープライズプロバイダーからの SAML アサーションを受け入れます。
| ID プロバイダー |
Cognito プロバイダーキー |
目的 |
| SAML プロバイダー |
arn:aws:iam::111122223333:saml-provider/EXAMPLE |
エンタープライズ IdP からの SAML アサーション |
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 へのアクセスを理解する
-
エンタープライズユーザーは、SAML プロバイダーで認証した後、Amazon Cognito アイデンティティプールから一時的な 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 アイデンティティプールの OIDC トークンと一時的な AWS 認証情報と交換し、AWS のサービスを呼び出す方法について説明します。
アイデンティティプールの拡張フローで OIDC サインインを使用する
-
デモアプリケーションで、[インタラクティブデモ] セクションに移動します。
-
[認証されたアクセス] タブを選択します。
-
[拡張フロー] タブを選択します。
-
[OIDC プロバイダーへのサインイン] を選択します。
-
エンタープライズ認証情報を使用してサインインを完了します。
-
OIDC プロバイダーは、認可コードをアプリケーションにリダイレクトします。
-
アプリケーションは、ユーザープールの認可コードを JSON ウェブトークンと交換します。
-
アプリケーションは OIDC トークンをアイデンティティプールに送信し、一時的な AWS 認証情報を取得します。
-
アプリケーションはウェブインターフェイスに [結果] パネルを表示します。
認証が成功すると、ウェブインターフェイスに [結果] パネルが表示されます。結果は、2 つのオプションを使用して参照できます。
-
[認証情報のみを表示] ボタン: 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"
}
}
-
[詳細な API フローを表示] ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
-
アプリケーションは OIDC IdP を使用してユーザーをサインインさせ、ID トークンを取得します。アイデンティティプールは、エンタープライズプロバイダーからの OIDC トークンを受け入れます。
| ID プロバイダー |
Cognito プロバイダーキー |
目的 |
| OIDC プロバイダー |
example-provider.com/oauth2/default |
エンタープライズ IdP からの OIDC ID トークン |
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 アイデンティティプールの OIDC トークンと一時的な AWS 認証情報と交換し、AWS のサービスを呼び出す方法について説明します。
アイデンティティプールの基本フローで OIDC サインインを使用する
-
デモアプリケーションで、[インタラクティブデモ] セクションに移動します。
-
[認証されたアクセス] タブを選択します。
-
[基本フロー] タブを選択します。
-
[OIDC プロバイダーへのサインイン] を選択します。
-
エンタープライズ認証情報を使用してサインインを完了します。
-
OIDC プロバイダーは、認可コードをアプリケーションにリダイレクトします。
-
アプリケーションは、ユーザープールの認可コードを JSON ウェブトークンと交換します。
-
アプリケーションは OIDC トークンをアイデンティティプールに送信し、一時的な AWS 認証情報を取得します。
-
アプリケーションはウェブインターフェイスに [結果] パネルを表示します。
認証が成功すると、ウェブインターフェイスに [結果] パネルが表示されます。結果は、2 つのオプションを使用して参照できます。
-
[認証情報のみを表示] ボタン: 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"
}
}
-
[詳細な API フローを表示] ボタン: API リクエストをステップバイステップで確認する場合は、このボタンを選択します。
-
アプリケーションは OIDC IdP を使用してユーザーをサインインさせ、ID トークンを取得します。アイデンティティプールは、エンタープライズプロバイダーからの OIDC トークンを受け入れます。
| ID プロバイダー |
Cognito プロバイダーキー |
目的 |
| OIDC プロバイダー |
example-provider.com/oauth2/default |
エンタープライズ IdP からの OIDC ID トークン |
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 認証を理解する
-
標準ベース: OIDC は OAuth 2.0 上に構築され、標準化された ID 情報を提供します。
-
トークンの検証: ID トークンの信頼性を検証できます。
-
クレームベースのアクセス: OIDC クレームは、ロールマッピングとアクセスコントロールに使用できます。
-
エンタープライズ統合: 一般的なエンタープライズ ID プロバイダーと連携します。
次のステップ
デモアプリケーションをセットアップして確認したら、以下のことができます。
-
まだテストしていない追加の ID プロバイダーを設定する
-
拡張認証と基本認証の両方を試して、その違いを理解する
-
独自のユースケースに合わせてデモをカスタマイズする
-
Amazon Cognito アイデンティティプールを独自のアプリケーションに統合する