翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Cognito ユーザープールによる認証
Amazon Cognito には、ユーザーを認証する方法がいくつか用意されています。ユーザーはパスワードと WebAuthn パスキーを使用してサインインできます。Amazon Cognito は、E メールまたは SMS メッセージでワンタイムパスワードを送信できます。独自の一連のチャレンジとレスポンスを調整する Lambda 関数を実装できます。これらは認証フローです。認証フローでは、ユーザーはシークレットを提供し、Amazon Cognito はシークレットを検証し、アプリケーションが OIDC ライブラリで処理するための JSON ウェブトークン (JWTs) を発行します。この章では、さまざまなアプリケーション環境でさまざまな認証フロー用にユーザープールとアプリケーションクライアントを設定する方法について説明します。マネージドログインのホストされたサインインページを使用するオプションと、 AWS SDK で独自のロジックとフロントエンドを構築するためのオプションについて説明します。
ドメインの有無にかかわらず、すべてのユーザープールはユーザープール API でユーザーを認証できます。ユーザープールにドメインを追加すると、ユーザープール エンドポイントを使用できます。ユーザープール API は、API リクエストのさまざまな認可モデルとリクエストフローをサポートします。
ユーザーの ID を検証するために、Amazon Cognito は、E メールや SMS メッセージのワンタイムパスワードやパスキーなどのパスワードに加えて、チャレンジタイプを組み込んだ認証フローをサポートしています。
トピック
認証フローの実装
マネージドログインを実装するか、認証用の AWS SDK を使用してカスタム構築されたアプリケーションフロントエンドを実装するかにかかわらず、実装する認証のタイプに合わせてアプリケーションクライアントを設定する必要があります。以下の情報は、アプリケーションクライアントとアプリケーションでの認証フローの設定について説明します。
ユーザープールによる認証について知っておくべきこと
Amazon Cognito ユーザープールを使用した認証モデルの設計では、次の情報を考慮してください。
- マネージドログインとホストされた UI の認証フロー
-
マネージドログインとクラシックホスト UI には、認証のオプションが異なります。パスワードレス認証とパスキー認証は、マネージドログインでのみ実行できます。
- AWS SDK 認証でのみ使用できるカスタム認証フロー
-
マネージドログインまたはクラシックホスト UI を使用して、カスタム認証フローや Lambda トリガーによるカスタム認証を実行することはできません。カスタム認証は AWS SDKsによる認証で使用できます。
- 外部 ID プロバイダー (IdP) サインインのマネージドログイン
-
AWS SDKs による認証では、サードパーティーの IdPs を介してユーザーにサインインすることはできません。マネージドログインまたはクラシックホスト UI を実装し、IdPs にリダイレクトしてから、結果の認証オブジェクトをアプリケーション内の OIDC ライブラリで処理する必要があります。マネージドログインの詳細については、「」を参照してくださいユーザープールマネージドログイン。
- 他のユーザー機能に対するパスワードレス認証の効果
-
ユーザープールとアプリケーションクライアントでワンタイムパスワードまたはパスキーを使用してパスワードレスサインインをアクティブ化すると、ユーザーの作成と移行に影響します。パスワードレスサインインがアクティブな場合:
-
管理者はパスワードなしでユーザーを作成できます。デフォルトの招待メッセージテンプレートが に変更され、
{###}
パスワードプレースホルダーが含まれなくなりました。詳細については、「管理者としてのユーザーアカウントの作成」を参照してください。 -
SDK ベースの SignUp オペレーションの場合、ユーザーはサインアップ時にパスワードを指定する必要はありません。マネージドログインとホストされた UI では、パスワードレス認証が許可されている場合でも、サインアップページでパスワードが必要です。詳細については、「ユーザーアカウントのサインアップと確認」を参照してください。
-
CSV ファイルからインポートされたユーザーは、使用可能なパスワードレスサインインオプションの E メールアドレスまたは電話番号が属性に含まれている場合、パスワードリセットなしでパスワードレスオプションを使用してすぐにサインインできます。詳細については、「CSV ファイルからユーザープールへのユーザーのインポート」を参照してください。
-
パスワードレス認証では、ユーザー移行 Lambda トリガーは呼び出されません。
-
パスワードレスの最初の要素でサインインするユーザーは、セッションに多要素認証 (MFA) 要素を追加できません。パスワードベースの認証フローのみが MFA をサポートします。
-
- パスキー証明書利用者URLs をパブリックサフィックスリストに含めることはできません
-
など、所有しているドメイン名を
www.example.com
パスキー設定の証明書利用者 (RP) ID として使用できます。この設定は、所有しているドメインで実行されるカスタムビルドアプリケーションをサポートすることを目的としています。パブリックサフィックスリスト、または PSL には、保護された高レベルドメインが含まれています。Amazon Cognito は、PSL のドメインに RP URL を設定しようとするとエラーを返します。
認証セッションフローの期間
ユーザープールの機能によっては、アプリケーションが Amazon Cognito からトークンを取得するRespondToAuthChallenge
前に、 InitiateAuth
および に対するいくつかのチャレンジに応答する可能性があります。Amazon Cognito は、各リクエストへの応答にセッション文字列を含めます。API リクエストを 1 つの認証フローにまとめるには、前のリクエストに対する応答のセッション文字列を、後続の各リクエストに含めます。デフォルトでは、セッション文字列が期限切れになる前に、ユーザーに各チャレンジを完了するまでに 3 分間が与えられます。この期間を調整するには、アプリケーションクライアントの認証フローセッション持続期間を変更します。次の手順では、アプリクライアントの構成で、この設定を変更する方法について説明します。
注記
認証フローセッション期間の設定は、Amazon Cognito ユーザープール API による認証に適用されます。マネージドログインは、多要素認証の場合はセッション時間を 3 分、パスワードリセットコードの場合は 8 分に設定します。
アプリクライアントの詳細については、「アプリケーションクライアントによるアプリケーション固有の設定」を参照してください。
失敗したサインイン試行のロックアウト動作
認証されていないサインインまたは IAM 認可のサインイン試行が 5 回失敗すると、Amazon Cognito は 1 秒間ユーザーをロックアウトします。ロックアウトの期間は、試行が 1 回失敗するたびに 2 倍になり、最大で約 15 分になります。ロックアウト期間中に試行すると Password attempts exceeded
例外が生成され、その後のロックアウト期間の長さには影響しません。サインイン試行の累積失敗回数 n (Password attempts
exceeded
例外を含まない) に対して、Amazon Cognito はユーザーを 2^(n-5) 秒間ロックアウトします。ロックアウトを n=0 初期状態にリセットするには、ユーザーは、ロックアウト期間後にサインインに成功するか、連続 15 分間、サインイン試行を開始してはなりません。この動作は変更される可能性があります。この動作は、パスワードベースの認証も実行しない限り、カスタムチャレンジに適用されません。
認証セッションの例
次の図とstep-by-stepガイドは、ユーザーがアプリケーションにサインインする一般的なシナリオを示しています。サンプルアプリケーションは、いくつかのサインインオプションをユーザーに示します。認証情報を入力して選択し、追加の認証要素を指定してサインインします。

ユーザーがユーザー名とパスワードでサインインしたり、E メールメッセージでワンタイムコードをリクエストしたり、フィンガープリントオプションを選択したりできるサインインページでアプリケーションを画像化します。
-
サインインプロンプト: アプリケーションには、ログインボタンが付いたホーム画面が表示されます。
-
サインインのリクエスト: ユーザーはログインを選択します。Cookie またはキャッシュから、アプリケーションはユーザー名を取得するか、ユーザー名の入力を求めます。
-
リクエストオプション: アプリケーションは、
USER_AUTH
フローを含むInitiateAuth
API リクエストを使用してユーザーのサインインオプションをリクエストし、ユーザーの使用可能なサインイン方法をリクエストします。 -
サインインオプションを送信する: Amazon Cognito は、
PASSWORD
、EMAIL_OTP
、および で応答しますWEB_AUTHN
。レスポンスには、次のレスポンスで再生するためのセッション識別子が含まれています。 -
表示オプション: アプリケーションには、ユーザーがユーザー名とパスワードを入力したり、ワンタイムコードを取得したり、フィンガープリントをスキャンしたりするための UI 要素が表示されます。
-
オプションを選択する/認証情報を入力する: ユーザーはユーザー名とパスワードを入力します。
-
認証の開始: アプリケーションは、ユーザー名とパスワードのサインインを確認し、ユーザー名とパスワードを提供する
RespondToAuthChallenge
API リクエストでユーザーのサインイン情報を提供します。 -
認証情報の検証: Amazon Cognito はユーザーの認証情報を確認します。
-
その他の課題: ユーザーには認証アプリで設定された多要素認証があります。Amazon Cognito は
SOFTWARE_TOKEN_MFA
チャレンジを返します。 -
チャレンジプロンプト: アプリケーションは、ユーザーの認証アプリから時間ベースのワンタイムパスワード (TOTP) をリクエストするフォームを表示します。
-
チャレンジへの回答: ユーザーは TOTP を送信します。
-
チャレンジに応答する: 別の
RespondToAuthChallenge
リクエストでは、アプリケーションはユーザーの TOTP を提供します。 -
チャレンジレスポンスの検証: Amazon Cognito はユーザーのコードを確認し、ユーザープールが現在のユーザーに追加のチャレンジを発行しないように設定されていると判断します。
-
問題トークン: Amazon Cognito は ID、アクセス、および JSON ウェブトークン (JWTs) の更新を返します。ユーザーの初期認証が完了しました。
-
トークンの保存: アプリケーションはユーザーのトークンをキャッシュして、ユーザーデータを参照し、リソースへのアクセスを許可し、トークンの有効期限が切れたときにトークンを更新できるようにします。
-
承認されたコンテンツのレンダリング: アプリケーションは、ユーザーの ID とロールに基づいてリソースへのユーザーのアクセスを決定し、アプリケーションコンテンツを配信します。
-
アクセスコンテンツ: ユーザーはサインインし、アプリケーションの使用を開始します。
-
トークンの有効期限が切れたコンテンツをリクエストする: 後で、ユーザーは認可が必要なリソースをリクエストします。ユーザーのキャッシュされたトークンの有効期限が切れています。
-
更新トークン: アプリケーションは、ユーザーの保存された更新トークンを使用して
InitiateAuth
リクエストを行います。 -
問題トークン: Amazon Cognito は新しい ID を返し、JWTsにアクセスします。ユーザーのセッションは、認証情報の追加プロンプトなしで安全に更新されます。
AWS Lambda トリガーを使用して、ユーザーの認証方法をカスタマイズできます。トリガーは独自のチャレンジを認証フローの一部として発行し検証を行います。
また、安全なバックエンドサーバーでは、管理者の認証フローを使用することもできます。ユーザー移行認証フローを使用すると、ユーザーがパスワードをリセットすることなく、ユーザー移行が可能になります。