

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

# Amazon Cognito ユーザープールによる認証
<a name="authentication"></a>

Amazon Cognito には、ユーザーを認証する方法がいくつか用意されています。ユーザーは、パスワードと WebAuthn パスキーを使用してサインインできます。Amazon Cognito は、E メールまたは SMS メッセージでワンタイムパスワードを送信できます。独自のチャレンジとレスポンスのシーケンスを調整する Lambda 関数を実装できます。これらは*認証フロー*です。認証フローでは、ユーザーがシークレットを提供します。Amazon Cognito がシークレットを検証して JSON ウェブトークン (JWT) を発行し、これをアプリケーションが OIDC ライブラリで処理します。この章では、さまざまなアプリケーション環境でさまざまな認証フロー用にユーザープールとアプリケーションクライアントを設定する方法について説明します。マネージドログインのホストされたサインインページを使用するオプションと、 AWS SDK で独自のロジックとフロントエンドを構築するためのオプションについて説明します。

ドメインの有無にかかわらず、すべてのユーザープールはユーザープール API でユーザーを認証できます。ユーザープールにドメインを追加すると、[ユーザープール エンドポイント](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html)を使用できます。ユーザープール API は、API リクエストのさまざまな認可モデルとリクエストフローをサポートします。

ユーザーのアイデンティティを検証するために、Amazon Cognito では、E メールや SMS メッセージのワンタイムパスワードやパスキーなどのパスワードに加えて、チャレンジタイプを組み込んだ認証フローをサポートしています。

**Topics**
+ [認証フローを実装する](#authentication-implement)
+ [ユーザープールによる認証について知っておくべきこと](#authentication-flow-things-to-know)
+ [認証セッションの例](#amazon-cognito-user-pools-authentication-flow)
+ [マネージドログインの認証方法を設定する](authentication-flows-selection-managedlogin.md)
+ [AWS SDKsで認証方法を管理する](authentication-flows-selection-sdk.md)
+ [認証フロー](amazon-cognito-user-pools-authentication-flow-methods.md)
+ [API 認証と SDK 認証の認可モデル](authentication-flows-public-server-side.md)

## 認証フローを実装する
<a name="authentication-implement"></a>

[マネージドログイン](authentication-flows-selection-managedlogin.md)を実装するか、認証用の AWS SDK [を使用してカスタム構築されたアプリケーションフロントエンド](authentication-flows-selection-sdk.md)を実装するかにかかわらず、実装する認証のタイプに合わせてアプリケーションクライアントを設定する必要があります。以下の情報では、[アプリケーションクライアント](user-pool-settings-client-apps.md)とアプリケーションにおける認証フローの設定について説明します。

------
#### [ App client supported flows ]

アプリケーションクライアントでサポートされているフローは、Amazon Cognito コンソールまたは AWS SDK の API を使用して設定できます。これらのフローをサポートするようにアプリケーションクライアントを設定した後で、アプリケーションにデプロイできます。

次の手順では、Amazon Cognito コンソールを使用してアプリケーションクライアントで利用できる認証フローを設定します。

**認証フロー用にアプリケーションクライアントを設定するには (コンソール)**

1. にサインイン AWS し、[Amazon Cognito ユーザープールコンソール](https://console.aws.amazon.com/cognito/v2/idp)に移動します。ユーザープールを選択するか、新しいユーザープールを作成します。

1. ユーザープールの設定で、**[アプリケーションクライアント]** メニューを選択します。アプリケーションクライアントを選択するか、新しく作成します。

1. **[アプリケーションクライアントに関する情報]** で、**[編集]** を選択します。

1. **[アプリケーションクライアントのフロー]** で、サポートする認証フローを選択します。

**認証フロー用にアプリケーションクライアントを設定するには (API/SDK)**  
Amazon Cognito API を使用してアプリケーションクライアントで利用可能な認証フローを設定するには、[CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-ExplicitAuthFlows) リクエストまたは [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html#CognitoUserPools-UpdateUserPoolClient-request-ExplicitAuthFlows) リクエストで `ExplicitAuthFlows` の値を設定します。次の例では、セキュアリモートパスワード (SRP) と選択ベースの認証をクライアントにプロビジョニングします。

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_AUTH",
   "ALLOW_USER_SRP_AUTH
]
```

アプリケーションクライアントがサポートするフローを設定するときは、以下のオプションと API 値を指定できます。


**アプリケーションクライアントでのフローのサポート**  

| 認証フロー | 互換性 | コンソール | API  | 
| --- | --- | --- | --- | 
| [選択ベースの認証](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) | サーバー側、クライアント側 | サインイン時に認証タイプを選択する | ALLOW\$1USER\$1AUTH | 
| [永続的なパスワードによるサインイン](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password) | クライアント側 | ユーザー名とパスワードでサインインする | ALLOW\$1USER\$1PASSWORD\$1AUTH | 
| [永続的なパスワードと安全なペイロードによるサインイン](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp) | サーバー側、クライアント側 | セキュアリモートパスワード (SRP) でサインインする | ALLOW\$1USER\$1SRP\$1AUTH | 
| [トークンの更新](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-refresh) | サーバー側、クライアント側 | 既存の認証済みセッションから新しいユーザートークンを取得する | ALLOW\$1REFRESH\$1TOKEN\$1AUTH | 
| [サーバー側の認証](authentication-flows-public-server-side.md#amazon-cognito-user-pools-server-side-authentication-flow) | サーバー側 | サーバー側の管理認証情報でサインインする | ALLOW\$1ADMIN\$1USER\$1PASSWORD\$1AUTH | 
| [カスタム認証](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-custom) | サーバー側およびクライアント側のカスタム構築アプリケーション。マネージドログインとの互換性なし。 | Lambda トリガーからのカスタム認証フローでサインインする | ALLOW\$1CUSTOM\$1AUTH | 

------
#### [ Implement flows in your application ]

マネージドログインでは、設定した認証オプションが、サインインページで自動的に利用可能になります。カスタム構築アプリケーションでは、初期フローの宣言から認証を開始します。
+ ユーザーのフローオプションのリストから選択するには、`USER_AUTH` フローで[選択ベースの認証](authentication-flows-selection-sdk.md#authentication-flows-selection-choice)を宣言します。このフローでは、[パスキー](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey)認証や[パスワードなし](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)の認証など、クライアントベースの認証フローでは利用できない認証方法を利用できます。
+ 認証フローを事前に選択するには、アプリケーションクライアントで利用可能な他のフローで[クライアントベースの認証](authentication-flows-selection-sdk.md#authentication-flows-selection-client)を宣言します。

ユーザーをサインインさせるときは、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow) リクエストまたは [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthFlow) リクエストの本文に `AuthFlow` パラメータを含める必要があります。

選択ベースの認証:

```
"AuthFlow": "USER_AUTH"
```

SRP によるクライアントベースの認証:

```
"AuthFlow": "USER_SRP_AUTH"
```

------

## ユーザープールによる認証について知っておくべきこと
<a name="authentication-flow-things-to-know"></a>

Amazon Cognito ユーザープールを使用した認証モデルの設計では、以下の情報を考慮してください。

**マネージドログインとホストされた UI の認証フロー**  
[マネージドログイン](cognito-user-pools-managed-login.md)には、クラシックのホストされた UI よりも多くの認証オプションがあります。例えば、ユーザーはマネージドログインでのみ、パスワードなしの認証とパスキー認証を実行できます。

** AWS SDK 認証でのみ使用できるカスタム認証フロー**  
マネージドログインまたはクラシックのホストされた UI で、*カスタム認証フロー*や [Lambda トリガーによるカスタム認証](user-pool-lambda-challenge.md)を行うことはできません。カスタム認証は [AWS SDK による認証](authentication-flows-selection-sdk.md)で利用できます。

**外部 ID プロバイダー (IdP) によるサインイン用のマネージドログイン**  
[AWS SDKs による認証](authentication-flows-selection-sdk.md)では[、サードパーティーの IdPs](cognito-user-pools-identity-federation.md) を介してユーザーにサインインすることはできません。マネージドログインまたはクラシックのホストされた UI を実装し、IdP にリダイレクトしてから、結果の認証オブジェクトをアプリケーション内の OIDC ライブラリで処理する必要があります。マネージドログインの詳細については、「[ユーザープールのマネージドログイン](cognito-user-pools-managed-login.md)」を参照してください。

**パスワードなしの認証が他のユーザー機能に与える影響**  
ユーザープールとアプリケーションクライアントで[ワンタイムパスワード](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)または[パスキー](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey)を使用してパスワードなしのサインインをアクティブ化すると、ユーザーの作成と移行に影響します。パスワードなしのサインインがアクティブな場合:  

1. 管理者はパスワードなしでユーザーを作成できます。デフォルトの招待メッセージテンプレートが変わり、`{###}` パスワードプレースホルダーを含まないようになります。詳細については、「[管理者としてのユーザーアカウントの作成](how-to-create-user-accounts.md)」を参照してください。

1. SDK ベースの[SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) オペレーションの場合、ユーザーはサインアップ時にパスワードを入力する必要はありません。マネージドログインとホストされた UI では、パスワードなしの認証が許可されている場合でも、サインアップページでパスワードが必要です。詳細については、「[ユーザーアカウントのサインアップと確認](signing-up-users-in-your-app.md)」を参照してください。

1. CSV ファイルからインポートされたユーザーは、ユーザーの属性に、パスワードなしのサインインオプションに利用できる E メールアドレスまたは電話番号が含まれている場合、パスワードをリセットせずに、パスワードなしのオプションで即座にサインインできます。詳細については、「[CSV ファイルからユーザープールへのユーザーのインポート](cognito-user-pools-using-import-tool.md)」を参照してください。

1. パスワードなしの認証では、[ユーザー移行の Lambda トリガー](user-pool-lambda-migrate-user.md)は呼び出されません。

1. ワンタイムパスワード (OTP) の最初の要素でサインインするユーザーは、セッションに[多要素認証 (MFA) ](user-pool-settings-mfa.md)要素を追加できません。ユーザー検証付きのパスキーは、 で設定すると MFA 要件を満たすことができます`MULTI_FACTOR_WITH_USER_VERIFICATION`。

**パスキーに依拠しているパーティの URL をパブリックサフィックスリストに含めることはできない**  
所有しているドメイン名 (`www.example.com` など) を、パスキー設定で依拠しているパーティ (RP) の ID として使用できます。この設定は、所有しているドメインで実行するカスタム構築アプリケーションをサポートすることを目的としています。[パブリックサフィックスリスト](https://publicsuffix.org/) (PSL) には、保護された高レベルのドメインが含まれています。PSL のドメインに RP URL を設定しようとすると、Amazon Cognito はエラーを返します。

**Topics**
+ [認証フローセッションの持続期間](#authentication-flow-session-duration)
+ [サインイン試行の失敗時におけるロックアウト動作](#authentication-flow-lockout-behavior)

### 認証フローセッションの持続期間
<a name="authentication-flow-session-duration"></a>

ユーザープールの機能によっては、アプリケーションが Amazon Cognito からトークンを取得する前に、`InitiateAuth` と `RespondToAuthChallenge` へのいくつかのチャレンジに応答することが必要になる場合があります。Amazon Cognito は、各リクエストへの応答にセッション文字列を含めます。API リクエストを 1 つの認証フローにまとめるには、前のリクエストに対する応答のセッション文字列を、後続の各リクエストに含めます。デフォルトでは、セッション文字列が期限切れになる前に、ユーザーに各チャレンジを完了するまでに 3 分間が与えられます。この期間を調整するには、アプリケーションクライアントの**認証フローセッション持続期間**を変更します。次の手順では、アプリクライアントの構成で、この設定を変更する方法について説明します。

**注記**  
**[認証フローセッションの持続期間]** の設定は、Amazon Cognito ユーザープール API による認証に適用されます。マネージドログインの場合、多要素認証にはセッション時間が 3 分、パスワードリセットコードには 8 分が設定されます。

------
#### [ Amazon Cognito console ]

**アプリクライアントの認証フローセッション持続期間を設定するには (AWS マネジメントコンソール)**

1. ユーザープールの **[App integration]** (アプリの統合) タブで、**[App clients and analytics]** (アプリクライアントと分析) コンテナからアプリクライアントの名前を選択します。

1. **[アプリケーションクライアントに関する情報]** コンテナで **[編集]** を選択します。

1. **[認証フローセッションの持続期間]** の値を、SMS および E メールの MFA コードに必要な有効期間 (分単位) に変更します。これにより、ユーザーがアプリクライアントで認証チャレンジを完了するまでの時間も変更されます。

1. **[Save changes]** (変更の保存) をクリックします。

------
#### [ User pools API ]

**アプリクライアントの認証フローセッション持続期間を設定するには (Amazon Cognito API)**

1. `DescribeUserPoolClient` リクエストから既存のユーザープール設定を使用して `UpdateUserPoolClient` リクエストを準備します。`UpdateUserPoolClient` リクエストには、既存のアプリクライアントのプロパティをすべて含める必要があります。

1. `AuthSessionValidity` の値を、SMS MFA コードに必要な有効持続期間 (分単位) に変更します。これにより、ユーザーがアプリクライアントで認証チャレンジを完了するまでの時間も変更されます。

------

アプリクライアントの詳細については、「[アプリケーションクライアントによるアプリケーション固有の設定](user-pool-settings-client-apps.md)」を参照してください。

### サインイン試行の失敗時におけるロックアウト動作
<a name="authentication-flow-lockout-behavior"></a>

ユーザーのパスワードによるサインイン試行が 5 回失敗すると、認証されていない API オペレーションと IAM で認可された API オペレーションのどちらでリクエストしたかにかかわらず、Amazon Cognito はユーザーを 1 秒間ロックアウトします。ロックアウトの期間は、試行が 1 回失敗するたびに 2 倍になり、最大で約 15 分になります。

ロックアウト期間中に試行すると `Password attempts exceeded` 例外が生成され、その後のロックアウト期間の長さには影響しません。サインイン試行の累積失敗回数が *n* (`Password attempts exceeded` 例外を含まない) に達すると、Amazon Cognito はユーザーを *2^(n-5)* 秒間ロックアウトします。ロックアウトを *n=0* 初期状態にリセットするには、ユーザーは、ロックアウト期間後にサインインに成功するか、連続 15 分間、サインイン試行を開始してはなりません。この動作は変更される可能性があります。この動作は、パスワードベースの認証も実行しない限り、カスタムチャレンジに適用されません。

## 認証セッションの例
<a name="amazon-cognito-user-pools-authentication-flow"></a>

次の図とステップバイステップガイドは、ユーザーがアプリケーションにサインインする一般的なシナリオを示しています。サンプルアプリケーションでは、いくつかのサインインオプションをユーザーに示します。ユーザーは認証情報を入力してオプションを 1 つ選択し、追加の認証要素を指定してサインインします。

![\[ユーザーに入力を求め、 AWS SDK でサインインするアプリケーションを示すフローチャート。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/authentication-api-userauth.png)


ユーザーがユーザー名とパスワードでサインインしたり、E メールメッセージでワンタイムコードをリクエストしたり、フィンガープリントオプションを選択したりできるサインインページを備えたアプリケーションを想像してください。

1. **サインインプロンプト**: アプリケーションは、*[ログイン]* ボタンがあるホーム画面を表示します。

1. **サインインのリクエスト**: ユーザーは *[ログイン]* を選択します。アプリケーションは、Cookie またはキャッシュからユーザー名を取得するか、ユーザー名の入力をユーザーに求めます。

1. **リクエストオプション**: アプリケーションは、`USER_AUTH` フローの `InitiateAuth` API リクエストでユーザーのサインインオプションをリクエストし、ユーザーが利用できるサインイン方法を求めます。

1. **サインインオプションの送信**: Amazon Cognito は、`PASSWORD`、`EMAIL_OTP`、`WEB_AUTHN` で応答します。応答には、次回の応答で再生するためのセッション識別子が含まれます。

1. **表示オプション**: アプリケーションは、ユーザーがユーザー名とパスワードの入力、ワンタイムコードの取得、フィンガープリントのスキャンを行うための UI 要素を表示します。

1. **オプションの選択/認証情報の入力**: ユーザーはユーザー名とパスワードを入力します。

1. **認証の開始**: アプリケーションは、ユーザー名パスワードによるサインインを確認してユーザー名とパスワードを提供する `RespondToAuthChallenge` API リクエストにより、ユーザーのサインイン情報を提供します。

1. **認証情報の検証**: Amazon Cognito はユーザーの認証情報を確認します。

1. **追加のチャレンジ**: ユーザーは、Authenticator アプリケーションで多要素認証を設定しています。Amazon Cognito は `SOFTWARE_TOKEN_MFA` チャレンジを返します。

1. **チャレンジプロンプト**: アプリケーションは、ユーザーの Authenticator アプリケーションから時間ベースのワンタイムパスワード (TOTP) をリクエストするフォームを表示します。

1. **チャレンジへの回答**: ユーザーは TOTP を送信します。

1. **チャレンジへの応答**: 別の `RespondToAuthChallenge` リクエストで、アプリケーションはユーザーの TOTP を提供します。

1. **チャレンジレスポンスの検証**: Amazon Cognito はユーザーのコードを確認し、ユーザープールが現在のユーザーに追加のチャレンジを発行しないように設定されていることを検証します。

1. **トークンの発行**: Amazon Cognito は ID、アクセス、JSON ウェブトークン (JWT) の更新を返します。ユーザーの初期認証がここで完了します。

1. **トークンの保存**: アプリケーションはユーザーのトークンをキャッシュして、ユーザーデータの参照、リソースへのアクセスの許可、有効期限切れトークンの更新ができるようにします。

1. **認可されたコンテンツのレンダリング**: アプリケーションは、ユーザーのアイデンティティとロールに基づいて、リソースへのユーザーのアクセス権を決定し、アプリケーションコンテンツを配信します。

1. **コンテンツへのアクセス**: ユーザーはサインインし、アプリケーションの使用を開始します。

1. **期限切れトークンによるコンテンツのリクエスト**: 後で、ユーザーは認可を必要とするリソースをリクエストします。ユーザーのキャッシュされたトークンの有効期限が切れています。

1. **更新トークン**: アプリケーションは、ユーザーの保存された更新トークンを使用して `InitiateAuth` リクエストを行います。

1. **トークンの発行**: Amazon Cognito は新しい ID とアクセス用の JWT を返します。ユーザーのセッションは、追加の認証情報の入力を求められることなく、安全に更新されます。

[AWS Lambda トリガー](cognito-user-pools-working-with-lambda-triggers.md)を使用して、ユーザーの認証方法をカスタマイズできます。トリガーは独自のチャレンジを認証フローの一部として発行し検証を行います。

また、安全なバックエンドサーバーでは、管理者の認証フローを使用することもできます。[ユーザー移行の認証フロー](cognito-user-pools-using-import-tool.md)を使用すると、ユーザーにパスワードのリセットを要求することなく、ユーザーを移行できます。

# マネージドログインの認証方法を設定する
<a name="authentication-flows-selection-managedlogin"></a>

[マネージドログインページ](cognito-user-pools-managed-login.md)は、ユーザープール認証のウェブフロントエンドであり、ユーザーがサインイン、サインアウト、またはパスワードをリセットするときに呼び出すことができます。このモデルの場合、アプリケーションは OIDC ライブラリをインポートして、ユーザープールのマネージドログインページにより、ブラウザベースの認証試行を処理します。ユーザーが使用できる認証形式は、ユーザープールとアプリケーションクライアントの設定によって異なります。アプリケーションクライアントに `ALLOW_USER_AUTH` フローを実装すると、Amazon Cognito は使用可能なオプションからサインイン方法を選択するようユーザーに求めます。`ALLOW_USER_PASSWORD_AUTH` を実装して SAML プロバイダーを割り当てると、ログインページでユーザー名とパスワードを入力するか、IdP を介して接続するかを選択するオプションがユーザーに表示されます。

Amazon Cognito ユーザープールコンソールでは、アプリケーションのマネージドログイン認証の設定を開始できます。新しいユーザープールの作成時に開発対象のプラットフォームを指定すると、コンソールに OIDC および OAuth ライブラリの実装例と、サインインおよびサインアウトフローを実装するためのスターターコードが表示されます。マネージドログインは、多くの OIDC に依拠しているパーティの実装を使用して構築できます。可能な場合は、[OIDC に依拠しているパーティの認定ライブラリ](https://openid.net/developers/certified-openid-connect-implementations/)を使用することをお勧めします。詳細については、「[ユーザープールの開始方法](getting-started-user-pools.md)」を参照してください。

通常、OIDC の証明書利用者ライブラリは、ユーザープールのエンドポイントを定期的にチェックして、トークン`.well-known/openid-configuration`エンドポイントや認可エンドポイントなどの発行者 URLs を決定します。ベストプラクティスとして、必要な場合は、この自動検出動作を実装します。発行者エンドポイントを手動で設定すると、エラーが発生する可能性があります。例えば、ユーザープールのドメインを変更するとします。`openid-configuration` へのパスは、ユーザープールのドメインにリンクされていないため、サービスエンドポイントを自動検出するアプリケーションは、ドメインの変更を自動的に検出します。

## マネージドログインのユーザープール設定
<a name="authentication-flows-selection-managedlogin-settings"></a>

アプリケーションの複数のプロバイダーによるサインインを許可したり、Amazon Cognito を独立したユーザーディレクトリとして使用したりする場合があります。また、ユーザー属性を収集したり、MFA をセットアップしてプロンプトを表示したり、E メールアドレスをユーザー名として要求したりする場合も考えられます。マネージドログインとホストされた UI のフィールドを直接編集することはできません。代わりに、ユーザープールの設定により、マネージドログインの認証フローの処理が自動的に設定されます。

ユーザープール設定の以下の項目により、Amazon Cognito がマネージドログインとホストされた UI でユーザーに提示する認証方法が決まります。

------
#### [ User pool options (Sign-in menu) ]

以下のオプションは、Amazon Cognito コンソールのユーザープールの **[サインイン]** メニューにあります。

**Cognito ユーザープールのサインインオプション**  
ユーザー名のオプションがあります。マネージドログインページとホストされた UI ページは、選択した形式のユーザー名のみを受け入れます。例えば、**E メール**を唯一のサインインオプションとしてユーザープールを設定すると、マネージドログインページは E メール形式のユーザー名のみを受け入れます。

**必須の属性**  
ユーザープールで属性を必須として設定すると、ユーザーはマネージドログインでのサインアップ時に、属性の値の入力を求められます。

**選択ベースのサインインのオプション**  
[選択ベースの認証](authentication-flows-selection-sdk.md#authentication-flows-selection-choice)での認証方法の設定があります。ここでは、[パスキー](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey)や[パスワードなし](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)などの認証方法を有効または無効にできます。これらの方法は、[マネージドログインのドメイン](managed-login-branding.md)と**ライト**階層より上の[機能プラン](cognito-sign-in-feature-plans.md)を持つユーザープールでのみ使用できます。

**多要素認証**  
マネージドログインとホストされた UI は、[MFA](user-pool-settings-mfa.md) の登録および認証オペレーションを処理します。ユーザープールで MFA が必須である場合、サインインページでは自動的に追加の要素を設定するようユーザーに求めます。また、MFA 設定を持つユーザーに MFA コードを使用して認証を完了するよう求めます。ユーザープールで MFA がオフまたはオプションである場合、サインインページでは MFA の設定を求めません。

**ユーザーアカウントの復旧**  
ユーザープールのセルフサービスによる[アカウントの復旧]()の設定により、ユーザーがパスワードをリセットできるリンクをサインインページに表示するかどうかが決まります。

------
#### [ User pool options (Domain menu) ]

以下のオプションは、Amazon Cognito コンソールのユーザープールの **[ドメイン]** メニューにあります。

**ドメイン**  
ユーザープールのドメインを選択すると、認証のためにブラウザを起動したときにユーザーが開くリンクのパスが設定されます。

**ブランディングバージョン**  
ブランディングバージョンを選択すると、ユーザープールのドメインにマネージドログインとホストされた UI のどちらが表示されるかが決まります。

------
#### [ User pool options (Social and external providers menu) ]

次のオプションは、Amazon Cognito コンソールのユーザープールの **[ソーシャルプロバイダーと外部プロバイダー]** メニューにあります。

**プロバイダー**  
ユーザープールに追加した ID プロバイダー (IdP) は、ユーザープール内の各アプリケーションクライアントに対してアクティブまたは非アクティブのままにすることができます。

------
#### [ App client options ]

以下のオプションは、Amazon Cognito コンソールのユーザープールの **[アプリケーションクライアント]** メニューにあります。これらのオプションを確認するには、リストからアプリケーションクライアントを選択します。

**Quick Setup アップガイド**  
Quick Setup ガイドには、さまざまな開発者環境向けのコード例が記載されています。コード例には、マネージドログイン認証をアプリケーションと統合するために必要なライブラリが含まれています。

**アプリケーションクライアント情報**  
この設定を編集して、現在のアプリケーションクライアントに対応するアプリケーションに割り当てられた IdP を設定します。Amazon Cognito は、マネージドログインページにユーザーのための選択肢を表示します。これらの選択肢は、割り当てられた方法と IdP によって決まります。例えば、`MySAML` という名前の SAML 2.0 IdP とローカルユーザープールのログインを割り当てると、マネージドログインページには認証方法プロンプトと `MySAML` のボタンが表示されます。

**認証設定**  
この設定を編集して、アプリケーションの認証方法を設定します。Amazon Cognito は、マネージドログインページにユーザーのための選択肢を表示します。これらの選択肢は、IdP としてユーザープールを利用できるかどうかと、割り当てた方法によって決まります。例えば、選択ベースの `ALLOW_USER_AUTH` 認証を割り当てると、マネージドログインページには、E メールアドレスの入力やパスキーによるサインインなど、利用可能な選択肢が表示されます。マネージドログインページには、割り当てた IdP のボタンも表示されます。

**ログインページ**  
このタブで利用可能なオプションを使用して、マネージドログインまたはホストされた UI のユーザーインタラクティブページの視覚的な効果を設定します。詳細については、「[マネージドログインページにブランディングを適用する](managed-login-branding.md)」を参照してください。

------

# AWS SDKsで認証方法を管理する
<a name="authentication-flows-selection-sdk"></a>

Amazon Cognito ユーザープールのユーザーは、さまざまな初期サインインオプション (*要素*) を使用してサインインできます。一部の要素の場合、ユーザーは多要素認証 (MFA) を追加できます。これらの最初の要素として、ユーザー名とパスワード、ワンタイムパスワード、パスキー、カスタム認証などがあります。詳細については、「[認証フロー](amazon-cognito-user-pools-authentication-flow-methods.md)」を参照してください。アプリケーションに組み込み UI コンポーネントがあり、 AWS SDK モジュールをインポートする場合は、認証用のアプリケーションロジックを構築する必要があります。2 つの主要な方法のいずれかを選択し、その方法に基づいて、実装する認証メカニズムを選択する必要があります。

*クライアントベースの認証*を実装できます。この場合、アプリケーションまたはクライアントが認証タイプを事前に宣言します。別の選択肢は、*選択ベースの認証*です。この場合、アプリケーションがユーザー名を収集し、ユーザーが使用できる認証タイプをリクエストします。これらのモデルは、要件に応じて、同じアプリケーションにまとめて実装することも、複数のアプリケーションクライアントに分割して実装することもできます。方法ごとに機能が異なります。例えば、クライアントベースにはカスタム認証があり、選択ベースにはパスワードなしの認証があります。

ユーザープール API の AWS SDK 実装で認証を実行するカスタムビルドのアプリケーションでは、ユーザープール設定、アプリケーションクライアント設定、クライアント側の設定に合わせて API リクエストを構成する必要があります。`USER_AUTH` の `AuthFlow` で始まる `InitiateAuth` セッションは、選択ベースの認証を開始します。Amazon Cognito は、優先する認証方法または選択肢のリストのいずれかをチャレンジとして使用し、API に応答します。`CUSTOM_AUTH` の `AuthFlow` で始まるセッションは、Lambda トリガーによるカスタム認証に直接進みます。

一部の認証方法は 2 つのフロータイプのいずれかに固定されており、一部の方法は両方で使用できます。

**Topics**
+ [選択ベースの認証](#authentication-flows-selection-choice)
+ [クライアントベースの認証](#authentication-flows-selection-client)

## 選択ベースの認証
<a name="authentication-flows-selection-choice"></a>

アプリケーションは、選択ベースの認証として、以下の認証方法をリクエストできます。これらのオプションは、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthParameters) または [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthParameters) の `PREFERRED_CHALLENGE` パラメータで宣言するか、[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeName) または [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html#CognitoUserPools-AdminRespondToAuthChallenge-request-ChallengeName) の `ChallengeName` パラメータで宣言します。

1. `EMAIL_OTP` および `SMS_OTP`

   [ワンタイムパスワードによるパスワードなしのサインイン](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)

1. `WEB_AUTHN`

   [WebAuthn パスキーを使用したパスワードなしのサインイン](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey)

1. `PASSWORD`

   [永続的なパスワードによるサインイン](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password)

   [永続的なパスワードと安全なペイロードによるサインイン](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp)

   [サインイン後の MFA](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)

これらのオプションを API コンテキストで確認するには、「[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeName)」で「`ChallengeName`」を参照してください。

選択ベースのサインインは、最初のリクエストに応じてチャレンジを発行します。このチャレンジは、リクエストされたオプションが利用可能であることを確認するか、利用可能な選択肢のリストを提供します。アプリケーションは、これらの選択肢をユーザーに表示することで、ユーザーが希望するサインイン方法の認証情報を入力し、チャレンジレスポンスで認証を続行できるようにします。

認証フローには、以下の選択ベースのオプションがあります。このタイプのすべてのリクエストでは、まずアプリケーションがユーザー名を収集するか、キャッシュから取得する必要があります。

1. `USERNAME` の `AuthParameters` のみを使用するオプションをリクエストします。Amazon Cognito は `SELECT_CHALLENGE` チャレンジを返します。そこから、アプリケーションは、ユーザーに対してチャレンジを選択し、このレスポンスをユーザープールに返すよう求めることができます。

1. `PREFERRED_CHALLENGE` の `AuthParameters` と優先チャレンジのパラメータ (ある場合) を使用して優先チャレンジをリクエストします。例えば、`PASSWORD_SRP` の `PREFERRED_CHALLENGE` をリクエストする場合は、`SRP_A` も含める必要があります。ユーザー、ユーザープール、アプリケーションクライアントがすべて優先チャレンジ用に設定されている場合、Amazon Cognito は、そのチャレンジの次のステップ (`PASSWORD_SRP`フローの `PASSWORD_VERIFIER`、`EMAIL_OTP` フリーや `SMS_OTP` フローの [CodeDeliveryDetails](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CodeDeliveryDetailsType.html) など) を返します。優先チャレンジが利用できない場合、Amazon Cognito は `SELECT_CHALLENGE` と利用可能なチャレンジのリストを返します。

1. 最初にユーザーをサインインさせ、次に選択ベースの認証オプションをリクエストします。サインインしたユーザーのアクセストークンを含む [GetUserAuthFactors](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAuthFactors.html) リクエストは、利用可能な選択ベースの認証要素と MFA 設定を返します。このオプションを使用すると、ユーザーは最初にユーザー名とパスワードでサインインし、次に別の認証形式をアクティブ化できます。このオペレーションを使用して、優先チャレンジでサインインしたユーザーの追加のオプションを確認することもできます。

選択ベースの認証用に[アプリケーションクライアントを設定](authentication.md#authentication-implement)するには、許可された認証フローに `ALLOW_USER_AUTH` を追加します。また、ユーザープール設定で許可する選択ベースの要素を選択する必要があります。以下のプロセスは、選択ベースの認証要素を選択する方法を示しています。

------
#### [ Amazon Cognito console ]

**ユーザープールで選択ベースの認証オプションを設定するには**

1. にサインイン AWS し、[Amazon Cognito ユーザープールコンソール](https://console.aws.amazon.com/cognito/v2/idp)に移動します。ユーザープールを選択するか、新しいユーザープールを作成します。

1. ユーザープール設定で、**[サインイン]** メニューを選択します。**[選択ベースのサインインのオプション]** を見つけ、**[編集]** を選択します。

1. **[パスワード]** オプションは常に利用可能です。これには、`PASSWORD` フローと `PASSWORD_SRP`フローが含まれます。ユーザーのオプションに追加する **[その他のオプション]** を選択します。追加できるのは、**パスキー** (`WEB_AUTHN`)、**メールメッセージのワンタイムパスワード** (`EMAIL_OTP`)、**SMS メッセージワンタイムパスワード** (`SMS_OTP`) です。

1. **[Save changes]** (変更の保存) をクリックします。

------
#### [ API/SDK ]

次の [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) または [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) リクエスト本文の一部は、選択ベースの認証に使用できるすべてのオプションを設定します。

```
"Policies": {
    "SignInPolicy": {
        "AllowedFirstAuthFactors": [
            "PASSWORD",
            "WEB_AUTHN",
            "EMAIL_OTP",
            "SMS_OTP"
        ]
    }
},
```

------

## クライアントベースの認証
<a name="authentication-flows-selection-client"></a>

クライアントベースの認証は、以下の認証フローをサポートします。これらのオプションは、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow) または [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthFlow) の `AuthFlow` パラメータで宣言します。

1. `USER_PASSWORD_AUTH` および `ADMIN_USER_PASSWORD_AUTH`

   [永続的なパスワードによるサインイン](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password)

   [サインイン後の MFA](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)

   この認証フローは、選択ベースの認証の `PASSWORD` と同等です。

1. `USER_SRP_AUTH`

   [永続的なパスワードと安全なペイロードによるサインイン](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp)

   [サインイン後の MFA](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)

   この認証フローは、選択ベースの認証の `PASSWORD_SRP` と同等です。

1. `REFRESH_TOKEN_AUTH`

   [更新トークン](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-refresh)

   この認証フローは、クライアントベースの認証でのみ使用できます。

1. `CUSTOM_AUTH`

   [カスタム認証](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-custom)

   この認証フローは、クライアントベースの認証でのみ使用できます。

クライアントベースの認証の場合、Amazon Cognito は、ユーザーが認証フローを開始する前に認証方法を決定済みであると想定します。ユーザーが提供するサインイン要素を決定するロジックは、デフォルト設定またはカスタムプロンプトで決定し、ユーザープールへの最初のリクエストで宣言する必要があります。`InitiateAuth` リクエストは、リストされているオプションの 1 つ (`USER_SRP_AUTH` など) に直接対応するサインイン `AuthFlow` を宣言します。この宣言により、リクエストには、認証を開始するためのパラメータ (`USERNAME`、`SECRET_HASH`、`SRP_A` など) も含まれます。Amazon Cognito は、このリクエストに続けて、SRP の `PASSWORD_VERIFIER` や TOTP MFA によるパスワードサインインの `SOFTWARE_TOKEN_MFA` など、追加のチャレンジを発行する場合があります。

クライアントベースの認証用に[アプリケーションクライアントを設定](authentication.md#authentication-implement)するには、許可された認証フローに `ALLOW_USER_AUTH` 以外の認証フローを追加します。例えば、`ALLOW_USER_PASSWORD_AUTH`、`ALLOW_CUSTOM_AUTH`、`ALLOW_REFRESH_TOKEN_AUTH` を追加します。クライアントベースの認証フローを許可するために、追加のユーザープール設定を行う必要はありません。

# 認証フロー
<a name="amazon-cognito-user-pools-authentication-flow-methods"></a>

Amazon Cognito ユーザープールの認証プロセスは、ユーザーが最初の選択を行い、認証情報を送信し、追加のチャレンジに応答する*フロー*として最もよく説明できます。マネージドログイン認証をアプリケーションに実装すると、Amazon Cognito は、これらのプロンプトとチャレンジのフローを管理します。アプリケーションのバックエンドに AWS SDK を使用してフローを実装する場合は、リクエストのロジックを構築し、ユーザーに入力を求め、チャレンジに応答する必要があります。

アプリケーション管理者は、ユーザー特性、セキュリティ要件、認可モデルを利用して、ユーザーにサインインを許可する方法を決定します。以下の質問を自問してください。
+ [他の ID プロバイダー (IdP)](#amazon-cognito-user-pools-authentication-flow-methods-federated) の認証情報を使用してサインインすることをユーザーに許可するか?
+ [ユーザー名とパスワード](#amazon-cognito-user-pools-authentication-flow-methods-password)は本人確認として十分であるか?
+ ユーザー名パスワード認証のための認証リクエストが傍受される可能性はあるか? アプリケーションでパスワードを送信したり、[ハッシュとソルトを使用して認証をネゴシエート](#amazon-cognito-user-pools-authentication-flow-methods-srp)したりするか?
+ パスワードの入力をスキップし、[ワンタイムパスワードを受信](#amazon-cognito-user-pools-authentication-flow-methods-passwordless)してサインインすることをユーザーに許可するか?
+ [サムプリント、顔、またはハードウェアセキュリティキー](#amazon-cognito-user-pools-authentication-flow-methods-passkey)を使用したサインインをユーザーに許可するか?
+ どのような場合に[多要素認証 (MFA)](#amazon-cognito-user-pools-authentication-flow-methods-mfa) を必須にするか?
+ [認証情報を再度要求せずにユーザーセッションを保持](#amazon-cognito-user-pools-authentication-flow-methods-refresh)するか?
+ Amazon Cognito の組み込み機能を超えて[認可モデルを拡張](#amazon-cognito-user-pools-authentication-flow-methods-custom)するか?

これらの質問に対する回答が得られたら、関連する機能をアクティブ化し、アプリケーションが行う認証リクエストで機能を実装する方法を検討できます。

ユーザーのサインインフローを設定したら、[GetUserAuthFactors](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAuthFactors.html) API オペレーションへのリクエストを使用して、MFA および[選択ベース](authentication-flows-selection-sdk.md#authentication-flows-selection-choice)の認証要素の現在のステータスを確認できます。このオペレーションには、サインインしたユーザーのアクセストークンによる認可が必要です。このオペレーションからは、ユーザー認証要素と MFA 設定が返されます。

**Topics**
+ [サードパーティの IdP によるサインイン](#amazon-cognito-user-pools-authentication-flow-methods-federated)
+ [永続的なパスワードによるサインイン](#amazon-cognito-user-pools-authentication-flow-methods-password)
+ [永続的なパスワードと安全なペイロードによるサインイン](#amazon-cognito-user-pools-authentication-flow-methods-srp)
+ [ワンタイムパスワードによるパスワードなしのサインイン](#amazon-cognito-user-pools-authentication-flow-methods-passwordless)
+ [WebAuthn パスキーを使用したパスワードなしのサインイン](#amazon-cognito-user-pools-authentication-flow-methods-passkey)
+ [サインイン後の MFA](#amazon-cognito-user-pools-authentication-flow-methods-mfa)
+ [更新トークン](#amazon-cognito-user-pools-authentication-flow-methods-refresh)
+ [カスタム認証](#amazon-cognito-user-pools-authentication-flow-methods-custom)
+ [ユーザー移行の認証フロー](#amazon-cognito-user-pools-user-migration-authentication-flow)

## サードパーティの IdP によるサインイン
<a name="amazon-cognito-user-pools-authentication-flow-methods-federated"></a>

Amazon Cognito ユーザープールは、Apple でサインイン、Amazon でログイン、OpenID Connect (OIDC) サービスなど、IdP 間の認証セッションの中間ブローカーとして機能します。このプロセスは、*フェデレーティッドサインイン*または*フェデレーティッド認証*とも呼ばれます。フェデレーティッド認証では、アプリケーションクライアントに組み込める認証フローは使用しません。代わりに、設定したユーザープール IdP をアプリケーションクライアントに割り当てます。フェデレーティッドサインインは、ユーザーがマネージドログインで IdP を選択するか、アプリケーションが IdP サインインページにリダイレクトするセッションを呼び出したときに発生します。

フェデレーティッドサインインでは、プライマリ認証要素と MFA 認証要素をユーザーの IdP に委任します。Amazon Cognito は、[ローカルユーザーにリンク](cognito-user-pools-identity-federation-consolidate-users.md)しない限り、このセクションの他の高度なフローをフェデレーションユーザーに追加しません。リンクされていないフェデレーションユーザーにはユーザー名がありますが、マッピングされた属性データのストアであり、通常はブラウザベースのフローから切り離してサインインに使用することはありません。

**実装リソース**
+ [サードパーティーの ID プロバイダーを使用したユーザープールへのサインイン](cognito-user-pools-identity-federation.md)

## 永続的なパスワードによるサインイン
<a name="amazon-cognito-user-pools-authentication-flow-methods-password"></a>

Amazon Cognito ユーザープールでは、すべてのユーザーにユーザー名があります。ユーザー名は、電話番号、E メールアドレス、選択した識別子、または管理者が指定した識別子です。このタイプのユーザーは、ユーザー名とパスワードでサインインし、必要に応じて MFA を指定できます。ユーザープールは、パブリックまたは IAM で認可された API オペレーションと SDK メソッドを使用してユーザー名パスワードによるサインインを実行できます。アプリケーションは、認証のためにパスワードをユーザープールに直接送信できます。ユーザープールは、認証が成功した結果として、追加のチャレンジまたは JSON ウェブトークン (JWT) で応答します。

------
#### [ Activate password sign-in ]

ユーザー名とパスワードによる[クライアントベースの認証](authentication-flows-selection-sdk.md#authentication-flows-selection-client)をアクティブ化するには、認証を許可するようにアプリケーションクライアントを設定します。Amazon Cognito コンソールで、ユーザープール設定の **[アプリケーション]** の下にある **[アプリケーションクライアント]** メニューに移動します。クライアント側のモバイルまたはネイティブアプリケーションでプレーンパスワードサインインを許可するには、アプリケーションクライアントを編集し、**[認証フロー]** で **[ユーザー名とパスワード (ALLOW\$1USER\$1PASSWORD\$1AUTH) を使用してサインインします]** を選択します。サーバー側のアプリケーションでプレーンパスワードサインインを許可するには、アプリケーションクライアントを編集し、**[サーバー側の管理者認証情報 (ALLOW\$1ADMIN\$1USER\$1PASSWORD\$1AUTH) を使用してサインインします]** を選択します。

ユーザー名とパスワードを使用して[選択ベースの認証](authentication-flows-selection-sdk.md#authentication-flows-selection-choice)を有効にするには、それを許可するようにアプリケーションクライアントを設定します。アプリケーションクライアントを編集し、**[選択ベースのサインイン: ALLOW\$1USER\$1AUTH]** を選択します。

![\[アプリケーションクライアントのプレーンパスワード認証フローの選択を示す Amazon Cognito コンソールのスクリーンショット。オプションとして、ALLOW_USER_PASSWORD_AUTH、ALLOW_ADMIN_USER_PASSWORD_AUTH、および ALLOW_USER_AUTH が選択されています。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/screenshot-choose-password-admin-password-and-user-auth.png)


選択ベースの認証フローでパスワード認証が使用可能であることを確認するには、**[サインイン]** メニューに移動し、**[選択ベースのサインインのオプション]** セクションを確認します。**[使用できる選択肢]** に **[パスワード]** が表示されている場合は、プレーンパスワード認証でサインインできます。**[パスワード]** オプションには、プレーンパスワード認証や SRP ユーザー名パスワード認証があります。

![\[ユーザープールの USER_AUTH 選択ベースのサインイン設定におけるパスワード認証の選択を示す Amazon Cognito コンソールのスクリーンショット。[パスワード] が有効になっているオプションとして表示されています。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/screenshot-password-flow-in-user-auth.png)


[CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) リクエストまたは [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html) リクエストで、希望するユーザー名パスワード認証オプションを使用して `ExplicitAuthFlows` を設定します。

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_PASSWORD_AUTH",
   "ALLOW_ADMIN_USER_PASSWORD_AUTH",
   "ALLOW_USER_AUTH"
]
```

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) リクエストまたは [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) リクエストで、サポートする選択ベースの認証フローを使用して `Policies` を設定します。`AllowedFirstAuthFactors` の `PASSWORD` 値には、認証フローとしてプレーンパスワードと SRP の両方のオプションが含まれます。

```
"Policies": {
   "SignInPolicy": {
      "AllowedFirstAuthFactors": [
         "PASSWORD",
         "EMAIL_OTP",
         "WEB_AUTHN"
      ]
   }
}
```

------
#### [ Choice-based sign-in with a password ]

ユーザー名パスワード認証を使用してユーザーをアプリケーションにサインインさせるには、[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) リクエストまたは [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) リクエストの本文を、以下のように設定します。現在のユーザーがユーザー名パスワード認証の適格性を満たしている場合、このサインインリクエストは成功するか、次のチャレンジに進みます。それ以外の場合は、使用可能な [主な要因] 認証チャレンジのリストで応答します。このパラメータセットは、サインインに必要な最小限のものです。その他のパラメータも使用可能です。

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PREFERRED_CHALLENGE" : "PASSWORD",
      "PASSWORD" : "[User's password]"
   },
   "ClientId": "1example23456789"
}
```

`PREFERRED_CHALLENGE` 値を省略して、ユーザーの適格なサインイン要素のリストを含むレスポンスを受け取ることもできます。

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser"
   },
   "ClientId": "1example23456789"
}
```

優先チャレンジを送信しなかったか、送信先のユーザーが優先チャレンジの適格性を満たしていない場合、Amazon Cognito はオプションのリストを `AvailableChallenges` で返します。`AvailableChallenges` に `PASSWORD` の `ChallengeName` が含まれている場合、[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) または [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) チャレンジレスポンスによる認証を次の形式で続行できます。チャレンジレスポンスを、最初のサインインリクエストへの API レスポンスに関連付ける `Session` パラメータを渡す必要があります。このパラメータセットは、サインインに必要な最小限のものです。その他のパラメータも使用可能です。

```
{
   "ChallengeName": "PASSWORD",
   "ChallengeResponses": { 
      "USERNAME" : "testuser",
      "PASSWORD" : "[User's Password]"
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response"
}
```

Amazon Cognito は、成功した適格な優先チャレンジリクエストと `PASSWORD` チャレンジレスポンスに対して、トークンを使用するか、多要素認証 (MFA) などの追加の必須チャレンジを使用して応答します。

------
#### [ Client-based sign-in with a password ]

ユーザー名パスワード認証を使用してクライアント側のアプリケーションにユーザーをサインインさせるには、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) リクエストの本文を、以下のように設定します。このパラメータセットは、サインインに必要な最小限のものです。その他のパラメータも使用可能です。

```
{
   "AuthFlow": "USER_PASSWORD_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PASSWORD" : "[User's password]"
   },
   "ClientId": "1example23456789"
}
```

ユーザー名パスワード認証を使用してサーバー側のアプリケーションにユーザーをサインインさせるには、[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) リクエストの本文を、以下のように設定します。アプリケーションは、 AWS 認証情報を使用してこのリクエストに署名する必要があります。このパラメータセットは、サインインに必要な最小限のものです。その他のパラメータも使用可能です。

```
{
   "AuthFlow": "ADMIN_USER_PASSWORD_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PASSWORD" : "[User's password]"
   },
   "ClientId": "1example23456789"
}
```

Amazon Cognito は、トークンを使用するか、多要素認証 (MFA) などの追加の必須チャレンジを使用して、成功したリクエストに応答します。

------

## 永続的なパスワードと安全なペイロードによるサインイン
<a name="amazon-cognito-user-pools-authentication-flow-methods-srp"></a>

ユーザープールのユーザー名パスワードによるサインイン方法の別の形式として、セキュアリモートパスワード (SRP) プロトコルがあります。このオプションは、パスワードを知っていることの証明 (パスワードハッシュとソルト) を送信し、ユーザープールで検証できるようにします。Amazon Cognito へのリクエストには、読み取り可能なシークレット情報が含まれないため、ユーザーが入力したパスワードを処理するのはアプリケーションのみです。SRP 認証には、数学的計算が含まれていて、SDK にインポートできる既存のコンポーネントで処理するのが最適です。SRP は通常、モバイルアプリなどのクライアント側のアプリケーションに実装されます。プロトコルの詳細については、「[スタンフォード SRP ホームページ](http://srp.stanford.edu/)」を参照してください。[ウィキペディア](https://en.wikipedia.org/wiki/Secure_Remote_Password_protocol)にもリソースと例があります。認証フローの SRP 計算には、[さまざまなパブリックライブラリ](https://en.wikipedia.org/wiki/Secure_Remote_Password_protocol#Implementations)を利用できます。

Amazon Cognito 認証の開始/チャレンジ/応答シーケンスでは、SRP を使用してユーザーとパスワードを検証します。SRP 認証をサポートするようにユーザープールとアプリケーションクライアントを設定し、サインインリクエストとチャレンジレスポンスのロジックをアプリケーションに実装する必要があります。SRP ライブラリは、ユーザーのパスワードを所有していることをユーザープールに示すための乱数と計算値を生成できます。アプリケーションは、Amazon Cognito ユーザープールの API オペレーションと SDK メソッドにおいて、これらの計算値を JSON 形式の `AuthParameters` フィールドと `ChallengeParameters` フィールドに入力して検証を行います。

------
#### [ Activate SRP sign-in ]

ユーザー名と SRP を使用した[クライアントベースの認証](authentication-flows-selection-sdk.md#authentication-flows-selection-client)を有効にするには、認証を許可するようにアプリケーションクライアントを設定します。Amazon Cognito コンソールで、ユーザープール設定の **[アプリケーション]** の下にある **[アプリケーションクライアント]** メニューに移動します。クライアント側のモバイルアプリまたはネイティブアプリで SRP サインインを許可するには、アプリケーションクライアントを編集し、**[認証フロー]** で **[セキュアリモートパスワード (SRP) (ALLOW\$1USER\$1SRP\$1AUTH) を使用してサインインします]** を選択します。

ユーザー名と SRP を使用した[選択ベースの認証](authentication-flows-selection-sdk.md#authentication-flows-selection-choice)を有効にするには、アプリケーションクライアントを編集し、**[選択ベースのサインイン: ALLOW\$1USER\$1AUTH]** を選択します。

![\[Amazon Cognito コンソールで、アプリケーションクライアントに選択されているセキュアリモートパスワード認証フローを示すスクリーンショット。オプションとして ALLOW_USER_SRP_AUTH と ALLOW_USER_AUTH が選択されています。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/screenshot-choose-SRP-and-user-auth.png)


選択ベースの認証フローで SRP 認証が使用可能であることを確認するには、**[サインイン]** メニューに移動し、**[選択ベースのサインインのオプション]** セクションを確認します。**[使用できる選択肢]** に **[パスワード]** が表示されている場合は、SRP 認証でサインインできます。**[パスワード]** オプションには、プレーンテキスト認証や SRP ユーザー名パスワード認証があります。

![\[ユーザープールの USER_AUTH 選択ベースのサインイン設定におけるパスワード認証の選択を示す Amazon Cognito コンソールのスクリーンショット。[パスワード] は、有効なオプションとして表示されています。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/screenshot-password-flow-in-user-auth.png)


[CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) リクエストまたは [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html) リクエストで、希望するユーザー名パスワード認証オプションを使用して `ExplicitAuthFlows` を設定します。

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_SRP_AUTH",
   "ALLOW_USER_AUTH"
]
```

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) リクエストまたは [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) リクエストで、サポートする選択ベースの認証フローを使用して `Policies` を設定します。`AllowedFirstAuthFactors` の `PASSWORD` 値には、認証フローとしてプレーンテキストパスワードと SRP の両方のオプションが含まれます。

```
"Policies": {
   "SignInPolicy": {
      "AllowedFirstAuthFactors": [
         "PASSWORD",
         "EMAIL_OTP",
         "WEB_AUTHN"
      ]
   }
}
```

------
#### [ Choice-based sign-in with SRP ]

SRP のユーザー名パスワード認証を使用してユーザーをアプリケーションにサインインさせるには、[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) リクエストまたは [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) リクエストの本文を、以下のように設定します。現在のユーザーがユーザー名パスワード認証の適格性を満たしている場合、このサインインリクエストは成功するか、次のチャレンジに進みます。それ以外の場合は、使用可能な [主な要因] 認証チャレンジのリストで応答します。このパラメータセットは、サインインに必要な最小限のものです。その他のパラメータも使用可能です。

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PREFERRED_CHALLENGE" : "PASSWORD_SRP",
      "SRP_A" : "[g^a % N]"
   },
   "ClientId": "1example23456789"
}
```

`PREFERRED_CHALLENGE` 値を省略して、ユーザーの適格なサインイン要素のリストを含むレスポンスを受け取ることもできます。

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser"
   },
   "ClientId": "1example23456789"
}
```

優先チャレンジを送信しなかったか、送信先のユーザーが優先チャレンジの適格性を満たしていない場合、Amazon Cognito はオプションのリストを `AvailableChallenges` で返します。`AvailableChallenges` に `PASSWORD_SRP` の `ChallengeName` が含まれている場合、[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) または [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) チャレンジレスポンスによる認証を次の形式で続行できます。チャレンジレスポンスを、最初のサインインリクエストへの API レスポンスに関連付ける `Session` パラメータを渡す必要があります。このパラメータセットは、サインインに必要な最小限のものです。その他のパラメータも使用可能です。

```
{
   "ChallengeName": "PASSWORD_SRP",
   "ChallengeResponses": { 
      "USERNAME" : "testuser",
      "SRP_A" : "[g^a % N]"
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response"
}
```

Amazon Cognito は、適格な優先チャレンジリクエストと `PASSWORD_SRP` チャレンジレスポンスに対して、`PASSWORD_VERIFIER` チャレンジで応答します。クライアントは SRP 計算を完了し、[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) リクエストまたは [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) リクエストでチャレンジに応答する必要があります。

```
{
   "ChallengeName": "PASSWORD_VERIFIER",
   "ChallengeResponses": { 
      "PASSWORD_CLAIM_SIGNATURE" : "string",
      "PASSWORD_CLAIM_SECRET_BLOCK" : "string",
      "TIMESTAMP" : "string"
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

`PASSWORD_VERIFIER` チャレンジレスポンスが成功すると、Amazon Cognito はトークンを発行するか、多要素認証 (MFA) などの別の必要なチャレンジを発行します。

------
#### [ Client-based sign-in with SRP ]

SRP 認証は、サーバー側よりもクライアント側での認証の方が一般的です。ただし、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) と [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) では SRP 認証を使用できます。ユーザーをアプリケーションにサインインさせるには、`InitiateAuth` リクエストまたは `AdminInitiateAuth` リクエストの本文を、以下のように設定します。このパラメータセットは、サインインに必要な最小限のものです。その他のパラメータも使用可能です。

クライアントは、ジェネレータモジュロ N *g* をシークレットランダム整数の *a* 乗して `SRP_A` を生成します。

```
{
   "AuthFlow": "USER_SRP_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "SRP_A" : "[g^a % N]"
   },
   "ClientId": "1example23456789"
}
```

Amazon Cognito は `PASSWORD_VERIFIER` チャレンジで応答します。クライアントは SRP 計算を完了し、[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) リクエストまたは [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) リクエストでチャレンジに応答する必要があります。

```
{
   "ChallengeName": "PASSWORD_VERIFIER",
   "ChallengeResponses": { 
      "PASSWORD_CLAIM_SIGNATURE" : "string",
      "PASSWORD_CLAIM_SECRET_BLOCK" : "string",
      "TIMESTAMP" : "string"
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

`PASSWORD_VERIFIER` チャレンジレスポンスが成功すると、Amazon Cognito はトークンを発行するか、多要素認証 (MFA) などの別の必要なチャレンジを発行します。

------

## ワンタイムパスワードによるパスワードなしのサインイン
<a name="amazon-cognito-user-pools-authentication-flow-methods-passwordless"></a>

パスワードは紛失したり盗まれたりする場合があります。ユーザーが検証済みの E メールアドレス、電話番号、または Authenticator アプリケーションにのみアクセスできることを確認したい場合もあります。このような場合の解決策は、*パスワードなし*のサインインです。アプリケーションは、ユーザー名、E メールアドレス、または電話番号の入力をユーザーに求めることができます。これにより、Amazon Cognito はワンタイムパスワード (OTP) を生成し、ユーザーに確認を求めます。コードが正しければ、認証が完了します。

ワンタイムパスワード (OTP) 認証フローは、ユーザープールに必要な多要素認証 (MFA) と互換性がありません。ユーザー検証によるパスキー認証は、 `FactorConfiguration`を に設定すると MFA 要件を満たすことができます`MULTI_FACTOR_WITH_USER_VERIFICATION`。ユーザープールで MFA がオプションの場合、MFA をアクティブ化したユーザーは OTP の最初の要素でサインインできません。MFA オプションユーザープールに MFA 設定がないユーザーは、パスワードなしの各要素でサインインできます。詳細については、「[ユーザープールの MFA について知っておくべきこと](user-pool-settings-mfa.md#user-pool-settings-mfa-prerequisites)」を参照してください。

ユーザーがパスワードなしの認証の一環として、SMS や E メールメッセージで受信したコードを正しく入力すると、ユーザープールは、ユーザーを認証することに加えて、ユーザーの未検証の E メールアドレスや電話番号属性を検証済みとしてマークします。E メールアドレスや電話番号を[自動的に検証](signing-up-users-in-your-app.md)するようにユーザープールを設定しているかどうかに関係なく、ユーザーステータスも `UNCONFIRMED` から `CONFIRMED` に変更されます。

**パスワードなしのサインインの新しいオプション**  
ユーザープールでパスワードなしの認証を有効にすると、一部のユーザーフローの動作が変更されます。

1. ユーザーはパスワードなしでサインアップし、サインイン時にパスワードなしの要素を選択できます。管理者としてパスワードなしでユーザーを作成することもできます。

1. [CSV ファイルでインポート](cognito-user-pools-using-import-tool.md)したユーザーは、パスワードなしの要素を使用してすぐにサインインできます。サインイン前にパスワードを設定する必要はありません。

1. パスワードを持たないユーザーは、`PreviousPassword` パラメータなしで [ChangePassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ChangePassword.html) API リクエストを送信できます。

**OTP による自動サインイン**  
E メール OTP または SMS メッセージ OTP でサインアップしてユーザーアカウントを確認するユーザーは、確認メッセージと一致するパスワードなしの要素を使用して自動的にサインインできます。マネージドログイン UI では、ユーザーがアカウントを確認して、確認コード配信方法による OTP サインインの適格性を満たしている場合、ユーザーは確認コードの入力後に、初回サインインに自動的に進みます。 AWS SDK を使用してカスタム構築されたアプリケーションで、以下のパラメータを [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) または [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) オペレーションに渡します。
+ `Session` リクエストパラメータとしての [ConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html) API レスポンスの `Session` パラメータ。
+ `USER_AUTH` の [AuthFlow](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow)。

`EMAIL_OTP` または `SMS_OTP` の [PREFERRED\$1CHALLENGE](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthParameters) を渡すことができますが、必須ではありません。`Session` パラメータは認証の証明となり、有効なセッションコードを渡すと、Amazon Cognito は `AuthParameters` を無視します。

サインインオペレーションは、認証の成功を示すレスポンス [AuthenticationResult](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AuthenticationResultType.html) を返します。以下の条件が満たされた場合、追加のチャレンジはありません。
+ `Session` コードは有効であり、期限切れになっていない。
+ ユーザーは OTP 認証方法の適格性を満たしている。

------
#### [ Activate passwordless sign-in ]

**コンソール**  
パスワードなしのサインインを有効にするには、1 つ以上のパスワードなしのタイプでプライマリサインインを許可するようにユーザープールを設定し、`USER_AUTH` フローを許可するようにアプリケーションクライアントを設定します。Amazon Cognito コンソールで、ユーザープール設定の **[認証]** の下にある **[サインイン]** メニューに移動します。**[選択ベースのサインインのオプション]** を編集し、**[メールメッセージのワンタイムパスワード]** または **[SMS メッセージワンタイムパスワード]** を選択します。両方のオプションを有効にすることができます。変更内容を保存します。

**[アプリケーションクライアント]** メニューに移動し、アプリケーションクライアントを選択するか、新しいアプリケーションクライアントを作成します。**[編集]** を選択し、**[サインイン時に認証タイプを選択: ALLOW\$1USER\$1AUTH]** を選択します。

**API/SDK**  
ユーザープール API で、[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) リクエストまたは [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) リクエストで適切なパスワードなしのオプションを使用して `SignInPolicy` を設定します。

```
"SignInPolicy": { 
    "AllowedFirstAuthFactors": [ 
        "EMAIL_OTP",
        "SMS_OTP"
    ]
}
```

[CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) リクエストまたは [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html) リクエストの必要なオプションを使用して、アプリケーションクライアント `ExplicitAuthFlows` を設定します。

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_AUTH"
]
```

------
#### [ Sign in with passwordless ]

パスワードなしのサインインには、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) や [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) で指定できる[クライアントベース](authentication-flows-selection-sdk.md#authentication-flows-selection-client)の `AuthFlow` はありません。OTP 認証は、`USER_AUTH` の[選択ベース](authentication-flows-selection-sdk.md#authentication-flows-selection-choice)の `AuthFlow` でのみ使用可能であり、希望するサインインオプションをリクエストするか、ユーザーの [AvailableChallenges](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-response-AvailableChallenges) からパスワードなしのオプションを選択することができます。ユーザーをアプリケーションにサインインさせるには、`InitiateAuth` リクエストまたは `AdminInitiateAuth` リクエストの本文を、以下のように設定します。このパラメータセットは、サインインに必要な最小限のものです。その他のパラメータも使用可能です。

この例では、ユーザーがどの方法でサインインするかわかりません。`PREFERRED_CHALLENGE` パラメータを追加し、優先チャレンジをユーザーに利用可能にすると、Amazon Cognito はそのチャレンジで応答します。

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser"
   },
   "ClientId": "1example23456789"
}
```

この例では、代わりに `"PREFERRED_CHALLENGE": "EMAIL_OTP"` または `"PREFERRED_CHALLENGE": "SMS_OTP"` を `AuthParameters` に追加できます。ユーザーがその優先方法の適格性を満たしている場合、ユーザープールはユーザーの E メールアドレスまたは電話番号に即座にコードを送信し、`"ChallengeName": "EMAIL_OTP"` または `"ChallengeName": "SMS_OTP"` を返します。

優先チャレンジを指定しない場合、Amazon Cognito は `AvailableChallenges` パラメータで応答します。

```
{
   "AvailableChallenges": [ 
      "EMAIL_OTP", 
      "SMS_OTP",
      "PASSWORD"
    ],
   "Session": "[Session ID]"
}
```

このユーザーは、E メールメッセージの OTP、SMS メッセージの OTP、ユーザー名パスワードによるパスワードなしのサインインの適格性を満たしています。アプリケーションは、ユーザーに選択を求めるか、内部ロジックに基づいて選択を行うことができます。次に、[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) リクエストまたは [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) リクエストに進み、チャレンジを選択できます。ユーザーが E メールメッセージの OTP を使用してパスワードなしの認証を完了したいとします。

```
{
   "ChallengeName": "SELECT_CHALLENGE",
   "ChallengeResponses": { 
      "USERNAME" : "testuser",
      "ANSWER" : "EMAIL_OTP" 
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

Amazon Cognito は `EMAIL_OTP` チャレンジで応答し、ユーザーの検証済み E メールアドレスにコードを送信します。アプリケーションは、このチャレンジに再度応答する必要があります。

`EMAIL_OTP` を `PREFERRED_CHALLENGE` としてリクエストした場合、これも次のチャレンジレスポンスとなります。

```
{
   "ChallengeName": "EMAIL_OTP",
   "ChallengeResponses": {
      "USERNAME" : "testuser", 
      "EMAIL_OTP_CODE" : "123456" 
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

------

## WebAuthn パスキーを使用したパスワードなしのサインイン
<a name="amazon-cognito-user-pools-authentication-flow-methods-passkey"></a>

パスキーは安全で、ユーザーの負担は比較的少なくて済みます。パスキーサインインでは、ユーザーが認証に使用できる外部デバイスである *Authenticator* を利用します。通常のパスワードでは、ユーザーがフィッシング、パスワードの推測、認証情報の盗難などの脆弱性にさらされます。パスキーを使用すると、アプリケーションは、携帯電話やその他のデバイスで情報システムにアタッチまたは組み込まれている高度なセキュリティ対策を活用できます。一般的なパスキーサインインワークフローは、iOS キーチェーンや Google Chrome パスワードマネージャーなど、パスワードまたは*認証情報*マネージャーをデバイスで呼び出すことから始まります。デバイス上の認証情報マネージャーは、パスキーを選択して、既存の認証情報やデバイスロック解除メカニズムを使用してパスキーを許可するようユーザーに求めます。モダンな電話には、顔スキャナー、フィンガープリントスキャナー、ロック解除パターンなどのメカニズムが備わっており、いくつかは、強力な認証の要素である*知識情報*と*所持情報*を同時に満たします。バイオメトリクスを使用したパスキー認証の場合、パスキーは*生体情報*に該当します。

パスワードをサムプリント、顔、またはセキュリティキー認証に置き換えることもできます。これは*パスキー*認証または *WebAuthn* 認証と呼ばれます。アプリケーションのデベロッパーは、ユーザーが最初にパスワードでサインインした後に、生体認証デバイスの登録を許可するのが一般的です。Amazon Cognito ユーザープールを使用すると、アプリケーションは、このサインインオプションをユーザー向けに設定できます。ユーザープールが `FactorConfiguration`に設定されている場合、パスキー認証は多要素認証 (MFA) の要件を満たすことができます`MULTI_FACTOR_WITH_USER_VERIFICATION`。この設定では、ユーザー検証によるパスキー認証が多要素認証としてカウントされます。

ワンタイムパスワード (OTP) 認証フローは、ユーザープールに必要な多要素認証 (MFA) と互換性がありません。ユーザー検証によるパスキー認証は、 `FactorConfiguration`を に設定すると MFA 要件を満たすことができます`MULTI_FACTOR_WITH_USER_VERIFICATION`。ユーザープールで MFA がオプションの場合、MFA をアクティブ化したユーザーは OTP の最初の要素でサインインできません。MFA オプションユーザープールに MFA 設定がないユーザーは、パスワードなしの各要素でサインインできます。詳細については、「[ユーザープールの MFA について知っておくべきこと](user-pool-settings-mfa.md#user-pool-settings-mfa-prerequisites)」を参照してください。

### パスキーとは
<a name="amazon-cognito-user-pools-authentication-flow-methods-passkey-what-are"></a>

パスキーを使用すると、複雑なパスワードを覚えたり、OTP を入力したりする必要がなくなり、ユーザーエクスペリエンスが簡素化します。パスキーは、[ワールドワイドウェブコンソーシアム](https://www.w3.org/TR/webauthn-3/) (W3C) と FIDO (Fast Identity Online) アライアンスが策定した WebAuthn および CTAP2 標準に基づいています。ブラウザとプラットフォームは、これらの標準を実装し、ウェブアプリケーションまたはモバイルアプリケーションでパスキーの登録や認証プロセスを開始するための API と、ユーザーがパスキー *Authenticator* を選択して操作するための UI を提供します。

ユーザーがウェブサイトやアプリに Authenticator を登録すると、Authenticator はパブリック/プライベートキーペアを作成します。WebAuthn ブラウザおよびプラットフォームは、パブリックキーをウェブサイトやアプリケーションのバックエンドに送信します。Authenticator は、ユーザーとアプリケーションに関するプライベートキー、キー ID、メタデータを保持します。ユーザーが登録済み Authenticator を使用して登録済みアプリケーションで認証しようとすると、ランダムなチャレンジが生成されます。このチャレンジへの応答は、そのアプリケーションおよびユーザーの Authenticator のプライベートキーで生成されたチャレンジのデジタル署名および関連メタデータです。ブラウザまたはアプリケーションプラットフォームはデジタル署名を受け取り、アプリケーションのバックエンドに渡します。次に、アプリケーションは保存されたパブリックキーを使用して署名を検証します。

**注記**  
アプリケーションは、ユーザーから Authenticator に提供した認証シークレットや、プライベートキーに関する情報を受け取ることはありません。

現在市販されている Authenticator の例と機能を以下に示します。Authenticator は、これらのカテゴリのいずれかまたはすべてを満たしている場合があります。
+ 一部の Authenticator は、PIN、顔やフィンガープリントによる生体認証入力、パスコードなどの要素を使用して*ユーザー検証*を行ってからアクセスを許可し、正当なユーザーのみがアクションを承認できるようにします。一方、ユーザー検証機能を備えていない Authenticator や、ユーザー検証が要件でないときにユーザー検証をスキップできる Authenticator もあります。
+ 一部の Authenticator (YubiKey ハードウェアトークンなど) はポータブルであり、USB、Bluetooth、または NFC 接続を介してデバイスと通信します。一部の Authenticator はローカルであり、PC の Windows Hello や iPhone の Face ID など、プラットフォームにバインドされています。デバイスにバインドされた Authenticator は、モバイルデバイスのように十分に小さい場合、ユーザーが持ち運ぶことができます。ワイヤレス通信を使用して、ハードウェア Authenticator をさまざまなプラットフォームに接続できる場合もあります。例えば、デスクトップブラウザのユーザーは、QR コードをスキャンするときに、スマートフォンをパスキー Authenticator として使用できます。
+ 一部のプラットフォームにバインドされたパスキーはクラウドに同期されるため、複数の場所から使用できます。例えば、iPhone の Face ID パスキーは、パスキーメタデータを iCloud キーチェーン内のユーザーの Apple アカウントと同期します。これらのパスキーは、ユーザーが各デバイスを個別に登録する必要がなく、Apple デバイス間でのシームレスな認証を許可します。1Password、Dashlane、Bitwarden などのソフトウェアベースの Authenticator は、ユーザーがこれをインストールしたすべてのプラットフォームでパスキーを同期します。

WebAuthn の用語では、ウェブサイトとアプリは*依拠しているパーティ*です。各パスキーは、特定の依拠しているパーティの ID に関連付けられます。この ID は、パスキー認証を受け入れるウェブサイトやアプリを表す統合識別子となります。開発者は、適切な認証範囲を確保するために、依拠しているパーティの ID を慎重に選択する必要があります。一般的な依拠しているパーティの ID は、ウェブサーバーのルートドメイン名です。この依拠しているパーティの ID 仕様を持つパスキーは、該当するドメインとサブドメインに対して認証できます。ユーザーがアクセスするウェブサイトの URL が依拠しているパーティの ID と一致しない場合、ブラウザとプラットフォームはパスキー認証を拒否します。同様に、モバイルアプリの場合、パスキーを使用できるのは、`.well-known` 関連付けファイルにアプリケーションパスが存在する場合のみです。このファイルは、依拠しているパーティの ID が示すパスにおいてアプリケーションが使用可能にします。

パスキーは*検出可能*です。ユーザーがユーザー名を入力することなく、ブラウザまたはプラットフォームで自動的に認識して使用できます。ユーザーは、パスキー認証をサポートするウェブサイトやアプリにアクセスすると、ブラウザまたはプラットフォームが既に認識しているパスキーのリストから選択できます。QR コードをスキャンすることもできます。

### Amazon Cognito でパスキー認証を実装する方法
<a name="amazon-cognito-user-pools-authentication-flow-methods-passkey-cognito"></a>

パスキーは、**ライト**を除くすべての[機能プラン](cognito-sign-in-feature-plans.md)で使用できるオプトイン機能です。[選択ベースの認証フロー](authentication-flows-selection-sdk.md#authentication-flows-selection-choice)でのみ使用できます。[マネージドログイン](authentication-flows-selection-managedlogin.md)では、Amazon Cognito がパスキー認証のロジックを処理します。[AWS SDK で Amazon Cognito ユーザープールの API](#amazon-cognito-user-pools-authentication-flow-methods) を使用して、アプリケーションのバックエンドでパスキー認証を行うこともできます。

Amazon Cognito は、ES256 (-7) と RS256 (-257) の 2 つの非対称暗号化アルゴリズムのいずれかを使用して作成されたパスキーを認識します。ほとんどの Authenticator は両方のアルゴリズムをサポートしています。デフォルトでは、ユーザーはハードウェアトークン、モバイルスマートフォン、ソフトウェア Authenticator アプリケーションなど、あらゆるタイプの認証を設定できます。Amazon Cognito は現在、[証明](https://csrc.nist.gov/glossary/term/attestation)の強制をサポートしていません。

ユーザープールでは、ユーザー検証を [優先] または [必須] に設定できます。この設定は、値を指定しない API リクエストではデフォルトで [優先] になり、Amazon Cognito コンソールではデフォルトで [優先] が選択されます。ユーザー検証を [優先] に設定すると、ユーザーはユーザー検証機能を持たない Authenticator を設定でき、登録および認証オペレーションはユーザー検証なしで成功します。パスキーの登録と認証でユーザー検証を義務付けるには、この設定を [必須] に変更します。

パスキー設定で設定した依拠しているパーティ (RP) の ID は重要な決定事項です。特に指定せず、[ドメインブランディングバージョン](managed-login-branding.md)がマネージドログインの場合、ユーザープールはデフォルトで[カスタムドメイン](cognito-user-pools-add-custom-domain.md)の名前を RP ID として想定します。カスタムドメインがなく、特に指定しない場合、ユーザープールはデフォルトで[プレフィックスドメイン](cognito-user-pools-assign-domain-prefix.md)の RP ID になります。パブリックサフィックスリスト (PSL) にないドメイン名に RP ID を設定することもできます。RP ID エントリは、マネージドログインと SDK 認証のパスキー登録と認証に適用されます。パスキーは、Amazon Cognito が RP ID をドメインとする `.well-known` 関連付けファイルを見つけることができるモバイルアプリケーションでのみ機能します。ベストプラクティスとして、ウェブサイトまたはアプリが公開される前に、依拠しているパーティの ID の値を決定して設定します。RP ID を変更すると、ユーザーは新しい RP ID を使用して再登録する必要があります。

各ユーザーは最大 20 個のパスキーを登録できます。パスキーを登録できるのは、少なくとも 1 回ユーザープールにサインインした後のみです。マネージドログインは、パスキー登録の労力を大幅に軽減します。ユーザープールとアプリケーションクライアントのパスキー認証を有効にすると、マネージドログインドメインを持つユーザープールは、エンドユーザーが新しいユーザーアカウントにサインアップした後にパスキーを登録するよう通知します。また、ユーザーのブラウザをいつでも呼び出して、パスキー登録用のマネージドログインページに誘導することもできます。Amazon Cognito がパスキー認証を開始する前に、ユーザーはユーザー名を入力する必要があります。マネージドログインは、これを自動的に処理します。サインインページでユーザー名の入力を求め、ユーザーが少なくとも 1 つのパスキーを登録していることを検証し、パスキーを使用してサインインするよう促します。同様に、SDK ベースのアプリケーションは、ユーザー名の入力を求め、認証リクエストでユーザー名を提供する必要があります。

パスキーを使用したユーザープール認証を設定したときに、カスタムドメインとプレフィックスドメインがある場合、RP ID はデフォルトでカスタムドメインの完全修飾ドメイン名 (FQDN) になります。Amazon Cognito コンソールでプレフィックスドメインを RP ID として設定するには、カスタムドメインを削除するか、プレフィックスドメインの FQDN を**サードパーティドメイン**として入力します。

------
#### [ Activate passkey sign-in ]

**コンソール**  
パスキーによるサインインを有効にするには、1 つ以上のパスワードなしのタイプでプライマリサインインを許可するようにユーザープールを設定し、さらに `USER_AUTH` フローを許可するようにアプリケーションクライアントを設定します。Amazon Cognito コンソールで、ユーザープール設定の **[認証]** の下にある **[サインイン]** メニューに移動します。**[選択ベースのサインインのオプション]** を編集し、**[利用できる選択肢]** のリストに **[パスキー]** を追加します。

**[認証方法]** メニューに移動し、**[パスキー]** を編集します。
+ **[ユーザー検証]** は、現在のユーザーがパスキーの使用を許可されていることを追加でチェックするために、ユーザープールでパスキーデバイスを必須にするかどうかの設定です。ユーザー検証を使用してデバイスを設定するようユーザーに推奨するが、必須にしない場合は、**[優先]** を選択します。ユーザー検証を必要とするデバイスのみをサポートする場合は、**[必須]** を選択します。詳細については、w3.org で「[ユーザー検証](https://www.w3.org/TR/webauthn-2/#user-verification)」を参照してください。
+ **[依拠しているパーティーの ID のドメイン]** は、アプリケーションからユーザーのパスキー登録リクエストに渡す識別子です。ユーザーのパスキー発行者と信頼関係を持つ対象を設定します。依拠しているパーティの ID は、以下の場合に、ユーザープールのドメインになります。  
**Cognito ドメイン**  
ユーザープールの Amazon Cognito [プレフィックスドメイン](cognito-user-pools-assign-domain-prefix.md)。  
**カスタムドメイン**  
ユーザープールの[カスタムドメイン](cognito-user-pools-add-custom-domain.md)。  
**サードパーティードメイン**  
ユーザープールのマネージドログインページを使用しないアプリケーションのドメイン。この設定は通常、[ドメイン](cognito-user-pools-assign-domain.md)を持たないユーザープールに関連付けられ、バックエンドで AWS SDK とユーザープール API を使用して認証を実行します。

**[アプリケーションクライアント]** メニューに移動し、アプリケーションクライアントを選択するか、新しいアプリケーションクライアントを作成します。**[編集]** を選択し、**[認証フロー]** で **[サインイン時に認証タイプを選択: ALLOW\$1USER\$1AUTH]** を選択します。

**API/SDK**  
ユーザープール API で、[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) リクエストまたは [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) リクエストの適切なパスキーオプションを使用して `SignInPolicy` を設定します。パスキー認証の `WEB_AUTHN` オプションには、他のオプションの少なくとも 1 つを追加する必要があります。パスキー登録には、既存の認証セッションが必要です。

```
"SignInPolicy": { 
    "AllowedFirstAuthFactors": [ 
        "PASSWORD",
        "WEB_AUTHN"
    ]
}
```

ユーザー検証の設定と RP ID を [SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html#CognitoUserPools-SetUserPoolMfaConfig-request-WebAuthnConfiguration) リクエストの `WebAuthnConfiguration` パラメータに指定します。パスキー認証結果の対象となる `RelyingPartyId` は、ユーザープールのプレフィックスドメインまたはカスタムドメインにするか、独自に選択したドメインにすることができます。

```
"WebAuthnConfiguration": { 
   "RelyingPartyId": "example.auth.us-east-1.amazoncognito.com",
   "UserVerification": "preferred",
   "FactorConfiguration": "SINGLE_FACTOR"
}
```

[CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) リクエストまたは [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html) リクエストの必要なオプションを使用して、アプリケーションクライアント `ExplicitAuthFlows` を設定します。

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_AUTH"
]
```

------
#### [ Register a passkey (managed login) ]

マネージドログインは、ユーザーのパスキー登録を処理します。ユーザープールでパスキー認証が有効な場合、Amazon Cognito は新規ユーザーアカウントの登録時にパスキーを設定するようユーザーに求めます。

ユーザーがサインアップ済みでパスキーを設定していないか、アカウントが管理者権限で作成されている場合、Amazon Cognito はパスキーを設定するようユーザーに促しません。この状態のユーザーは、パスキーを登録する前に、パスワードやパスワードなしの OTP など、別の要素でサインインする必要があります。

**パスキーを登録するには**

1. [サインインページ](authorization-endpoint.md)にユーザーを誘導します。

   ```
   https://auth.example.com/oauth2/authorize/?client_id=1example23456789&response_type=code&scope=email+openid+phone&redirect_uri=https%3A%2F%2Fwww.example.com
   ```

1. ユーザーからの認証結果を処理します。この例の場合、Amazon Cognito は、アプリケーションがトークンと交換する認証コードを使用して、ユーザーを `www.example.com` にリダイレクトします。

1. ユーザーをパスキー登録ページに誘導します。ユーザーには、ブラウザ Cookie があり、サインインセッションを維持します。パスキー URL は `client_id` パラメータと `redirect_uri` パラメータを使用します。Amazon Cognito は、認証されたユーザーにのみ、このページへのアクセスを許可します。パスワード、E メール OTP、または SMS OTP を使用してユーザーをサインインさせ、次のパターンに一致する URL を呼び出します。

   このリクエストに、`response_type` や `scope` など、[認可エンドポイント](authorization-endpoint.md)の他のパラメータを追加することもできます。

   ```
   https://auth.example.com/passkeys/add?client_id=1example23456789&redirect_uri=https%3A%2F%2Fwww.example.com
   ```

------
#### [ Register a passkey (SDK) ]

メタデータを使用してパスキーの認証情報を [PublicKeyCreationOptions](https://www.w3.org/TR/webauthn-3/#dictdef-publickeycredentialcreationoptions) オブジェクトに登録します。このオブジェクトは、サインインしたユーザーの認証情報を使用して生成し、API リクエストでパスキー発行者に提示できます。発行者は、[RegistrationResponseJSON](https://www.w3.org/TR/webauthn-3/#dictdef-registrationresponsejson) オブジェクトを返して、パスキーの登録を確認します。

パスキー登録プロセスを開始するには、既存のサインインオプションを使用してユーザーをサインインさせます。現在のユーザーのアクセストークンを使用して、[トークンで認可された](authentication-flows-public-server-side.md#user-pool-apis-auth-unauth-token-auth)[StartWebAuthnRegistration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartWebAuthnRegistration.html) API リクエストを承認します。次に示すのは、`GetWebAuthnRegistrationOptions` リクエストの本文の例です。

```
{
   "AccessToken": "eyJra456defEXAMPLE"
}
```

ユーザープールからのレスポンスには、`PublicKeyCreationOptions` オブジェクトが含まれています。このオブジェクトを API リクエストでユーザーの発行者に提示します。オブジェクトは、パブリックキーや依拠しているパーティの ID などの情報を提供します。発行者は `RegistrationResponseJSON` オブジェクトで応答します。

[CompleteWebAuthnRegistration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CompleteWebAuthnRegistration.html) API リクエストで (ユーザーのアクセストークンで再認可された) 登録レスポンスを提示します。ユーザープールから空の本文を持つ HTTP 200 レスポンスが返されると、ユーザーのパスキーが登録されています。

------
#### [ Sign in with a passkey ]

パスワードなしのサインインには、[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) および [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) で指定できる `AuthFlow` はありません。代わりに、`USER_AUTH` の `AuthFlow` を宣言してサインインオプションをリクエストするか、ユーザープールからのレスポンスでパスワードなしのオプションを選択する必要があります。ユーザーをアプリケーションにサインインさせるには、`InitiateAuth` リクエストまたは `AdminInitiateAuth` リクエストの本文を、以下のように設定します。このパラメータセットは、サインインに必要な最小限のものです。その他のパラメータも使用可能です。

この例では、ユーザーがパスキーでサインインすることがわかっているため、`PREFERRED_CHALLENGE` パラメータを追加します。

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PREFERRED_CHALLENGE" : "WEB_AUTHN"
   },
   "ClientId": "1example23456789"
}
```

Amazon Cognito は `WEB_AUTHN` チャレンジで応答します。アプリケーションは、このチャレンジに応答する必要があります。ユーザーのパスキープロバイダーを使用してサインインリクエストを開始します。[AuthenticationResponseJSON](https://www.w3.org/TR/webauthn-3/#dictdef-authenticationresponsejson) オブジェクトが返されます。

```
{
   "ChallengeName": "WEB_AUTHN",
   "ChallengeResponses": {
      "USERNAME" : "testuser", 
      "CREDENTIAL" : "{AuthenticationResponseJSON}" 
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

------

## サインイン後の MFA
<a name="amazon-cognito-user-pools-authentication-flow-methods-mfa"></a>

ユーザー名パスワードフローでサインインを完了したユーザーに対して、E メールメッセージ、SMS メッセージ、またはコード生成アプリケーションのワンタイムパスワードを使用した追加の検証を求めるように設定できます。MFA は、ワンタイムパスワードによるパスワードレスサインインとは異なります。ただし、ユーザープール `MULTI_FACTOR_WITH_USER_VERIFICATION`で を `FactorConfiguration`として設定すると、ユーザー検証付きのパスキーは MFA 要件を満たすことができます`WebAuthnConfiguration`。パスワードベースのフローの場合、ユーザープールの MFA はチャレンジレスポンスモデルであり、ユーザーは最初にパスワードを知っていることを示し、次に登録された第 2 要素デバイスにアクセスできることを示します。

**実装リソース**
+ [ユーザープールに MFA を追加します](user-pool-settings-mfa.md)

## 更新トークン
<a name="amazon-cognito-user-pools-authentication-flow-methods-refresh"></a>

認証情報を再入力せずにユーザーがサインインしたままにする場合、*更新トークン*は、アプリケーションがユーザーのセッションを維持するためのツールとなります。アプリケーションは、更新トークンをユーザープールに提示し、新しい ID トークンやアクセストークンと交換できます。トークンの更新により、サインインしているユーザーが引き続きアクティブであることの確認、更新された属性情報の取得、ユーザーの介入なしのアクセスコントロール権限の更新を行うことができます。

**実装リソース**
+ [更新トークン](amazon-cognito-user-pools-using-the-refresh-token.md)

## カスタム認証
<a name="amazon-cognito-user-pools-authentication-flow-methods-custom"></a>

ここに記載していない、ユーザーの認証方法を設定することもできます。そのためには、Lambda トリガーによる*カスタム認証*を使用します。一連の Lambda 関数により、Amazon Cognito はチャレンジを発行し、ユーザーに回答を求める質問を行い、回答が正確であることを確認し、別のチャレンジを発行すべきかどうかを判断します。質問と回答には、セキュリティの質問、CAPTCHA サービスへのリクエスト、外部 MFA サービス API へのリクエスト、またはこれらすべてが順に含まれます。

**実装リソース**
+ [カスタム認証チャレンジの Lambda トリガー](user-pool-lambda-challenge.md)

### カスタム認証フロー
<a name="amazon-cognito-user-pools-custom-authentication-flow"></a>

Amazon Cognito ユーザープールにより、カスタム認証フローを使用することもできます。これは AWS Lambda トリガーを使用したチャレンジ/レスポンスベースの認証モデルの作成に役立ちます。

カスタム認証フローを使用すると、チャレンジとレスポンスサイクルをカスタマイズすることが可能になり、さまざまな要件に対応できます。このフローは、使用する認証のタイプを示す `InitiateAuth` API 操作の呼び出しから始まり、初期の認証パラメータを提供します。Amazon Cognito は、以下のいずれかの情報を使用して `InitiateAuth` コールに応答します。
+ ユーザーへのチャレンジ、ならびにセッションおよびパラメータ。
+ ユーザーが認証に失敗した場合はエラー。
+ `InitiateAuth` コールで渡されたパラメータがユーザーのサインインに十分な場合は、ID、アクセス権限、更新トークン。(通常、ユーザーまたはアプリケーションは最初にチャレンジに応答する必要がありますが、カスタムコードはこれを判定する必要があります。)

 Amazon Cognito がチャレンジで `InitiateAuth` コールに応答する場合、アプリは追加の入力を収集して、`RespondToAuthChallenge` 操作を呼び出します。このコールは、チャレンジ応答を提供し、セッションを返します。Amazon Cognito は、`RespondToAuthChallenge` コールに対しても `InitiateAuth` コール同様の対応をします。ユーザーがサインインしている場合、Amazon Cognito はトークンを提供します。ユーザーがサインインしていない場合、Amazon Cognito は別のチャレンジまたはエラーを提供します。Amazon Cognito が別のチャレンジを返した場合、ユーザーが正常にサインインするかエラーが返されるまで、シーケンスが繰り返され、アプリは `RespondToAuthChallenge` を呼び出します。`InitiateAuth` API 操作と `RespondToAuthChallenge` API 操作に関する詳細については、[API ドキュメント](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html)に記載されています。

### カスタム認証フローとチャレンジ
<a name="Custom-authentication-flow-and-challenges"></a>

アプリはカスタム認証フローを開始するために、`InitiateAuth` を `CUSTOM_AUTH` として `Authflow` を呼び出すことができます。カスタム認証フローで、3 つの Lambda トリガーがチャレンジとレスポンスの検証を制御します。
+ `DefineAuthChallenge` Lambda トリガーは、以前のチャレンジとレスポンスのセッション配列を入力として使用します。そして、次のチャレンジ名と、ユーザーが認証済みで、トークンを付与できるかどうかを示すブール値を生成します。この Lambda トリガーは、チャレンジを通じてユーザーのパスを制御するステートマシンです。
+ `CreateAuthChallenge` Lambda トリガーは、チャレンジ名を入力として使用し、チャレンジとパラメータを生成してレスポンスを評価します。`DefineAuthChallenge` が次のチャレンジとして `CUSTOM_CHALLENGE` を返すと、認証フローは、`CreateAuthChallenge` を呼び出します。`CreateAuthChallenge`Lambda トリガーは、チャレンジメタデータパラメータで次のタイプのチャレンジを渡します。
+ `VerifyAuthChallengeResponse` Lambda 関数は、レスポンスを評価し、レスポンスが有効であるかどうかを示すブール値を返します。

カスタム認証フローでは、SRP パスワードの検証や SMS を介した MFA などの、内部定義されたチャレンジを組み合わせて使用することもできます。CAPTCHA や秘密の質問などのカスタムチャレンジを使用できます。

### カスタム認証フローにおける SRP パスワードの検証の使用
<a name="Using-SRP-password-verification-in-custom-authentication-flow"></a>

カスタム認証フローに SRP を含める場合には、最初に SRP を処理する必要があります。
+ カスタムフローで SRP パスワードの検証を開始する場合、アプリは `InitiateAuth` を `CUSTOM_AUTH` として `Authflow` を呼び出します。`AuthParameters` マップで、アプリケーションからのリクエストは、`SRP_A:` (SRP A 値) および `CHALLENGE_NAME: SRP_A` を含んでいます。
+ `CUSTOM_AUTH` フローは、`challengeName: SRP_A` および `challengeResult: true` の初期セッションにより、`DefineAuthChallenge` の Lambda トリガーを呼び出します。Lambda 関数は、`challengeName: PASSWORD_VERIFIER`、`issueTokens: false`、および `failAuthentication: false` により、応答します。
+  次にアプリケーションは、(`challengeName: PASSWORD_VERIFIER`、そして `challengeResponses` マップ内の SRP に必要な他のパラメータを使用して) `RespondToAuthChallenge` を呼び出す必要があります。
+ Amazon Cognito がパスワードを検証すると、`challengeName: PASSWORD_VERIFIER` と `challengeResult: true` の 2 番目のセッションで、`RespondToAuthChallenge` により Lambda トリガーの `DefineAuthChallenge` が呼び出されます。その時点で `DefineAuthChallenge` Lambda トリガーは、`challengeName: CUSTOM_CHALLENGE` を使用して応答することでカスタムチャレンジを開始します。
+ MFA がユーザーに対して有効になっている場合、Amazon Cognito がパスワードを確認した後、ユーザーは MFA の設定またはサインインを要求されます。

**注記**  
Amazon Cognito がホストするサインインウェブページは、[カスタム認証チャレンジの Lambda トリガー](user-pool-lambda-challenge.md) をアクティブ化できません。

サンプルコードを含めた Lambda トリガーの詳細については、「[Lambda トリガーを使用したユーザープールワークフローのカスタマイズ](cognito-user-pools-working-with-lambda-triggers.md)」を参照してください。

## ユーザー移行の認証フロー
<a name="amazon-cognito-user-pools-user-migration-authentication-flow"></a>

ユーザー移行用 Lambda トリガーは、レガシーのユーザー管理システムからユーザープールにユーザーを移行する際に役立ちます。`USER_PASSWORD_AUTH` 認証フローを選択している場合には、移行中のユーザーがパスワードをリセットする必要はありません。このフローは、認証中に暗号化された SSL 接続を介してユーザーのパスワードをサービスに送信します。

すべてのユーザーの移行が完了したら、フローをよりセキュアな SRP フローに切り替えます。SRP フローは、ネットワーク経由でパスワードを送信しません。

Lambda トリガーの詳細については、「[Lambda トリガーを使用したユーザープールワークフローのカスタマイズ](cognito-user-pools-working-with-lambda-triggers.md)」を参照してください。

Lambda トリガーを使用したユーザーの移行の詳細については、「[ユーザー移行の Lambda トリガーを使用したユーザーのインポート](cognito-user-pools-import-using-lambda.md)」を参照してください。

# API 認証と SDK 認証の認可モデル
<a name="authentication-flows-public-server-side"></a>

ユーザープール認証を使用してアプリケーション開発を始める場合は、アプリケーションタイプに適した API 認可モデルを決める必要があります。認可モデルとは、Amazon Cognito ユーザープール API および SDK 統合の認証コンポーネントを使用してリクエストを行うための認証を提供するシステムです。Amazon Cognito には、IAM 認可、パブリック、トークン認可の 3 つの承認モデルがあります。

IAM で認可されたリクエストの場合、認可は、リクエストの `Authorization` ヘッダーにある一連の AWS IAM 認証情報による署名から取得されます。サーバー側のアプリケーションの場合、この方法は IAM 認可を使用して認証オペレーションを保護します。パブリック (認証されていない) 認証リクエストでは、認可は必要ありません。これは、ユーザーに配布されるクライアント側のアプリケーションに適しています。トークンで認可されたオペレーションは、通常、パブリックオペレーションと組み合わせて実装され、認可は、リクエストの `Authorization` ヘッダーに含まれるセッショントークンまたはアクセストークンから取得されます。Amazon Cognito 認証では、通常、2 つ以上の API オペレーションを順番に実装する必要があり、使用する API オペレーションはアプリケーションの特性によって異なります。アプリケーションがユーザーに配布されるパブリッククライアントでは、サインインのリクエストに認可を必要としないパブリックオペレーションを使用します。トークンで認可されたオペレーションは、パブリックアプリケーションでユーザーのセッションを続行します。アプリケーションロジックがリモートシステムでホストされているサーバー側のクライアントでは、サインインリクエストの IAM 認可を使用して認証オペレーションを保護します。以下の API オペレーションペアとそれに対応する SDK メソッドは、使用可能な認可モデルに対応しています。

各パブリック認証オペレーションには、[UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) や [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) など、サーバー側に同等の形式があります。クライアント側のオペレーションはユーザーが開始し、確認を必要としますが、サーバー側のオペレーションでは、変更がユーザープール管理者によってコミットされたと見なし、変更がすぐに有効になります。この例では、Amazon Cognito からユーザーに確認コードを記載したメッセージを送信し、ユーザーのアクセストークンで [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) リクエストによるコードの送信を許可します。サーバー側のアプリケーションは、任意の属性の値を即座に設定できますが、サインインに E メールアドレスと電話番号を使用する場合、これらの値の変更には[特別な考慮事項が適用](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html#CognitoUserPools-AdminUpdateUserAttributes-request-UserAttributes)されます。

API 認証を比較し、API オペレーションと認可モデルの詳細なリストを確認するには、「[API、OIDC、マネージドログインページの認証についての理解](#user-pools-API-operations)」を参照してください。

------
#### [ Client-side (public) authentication ]

以下は、クライアント側のアプリケーションでの一般的なリクエストのシーケンスです。

1. パブリック [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) オペレーションは、ユーザー名とパスワードなどのプライマリ認証情報を送信します。

1. トークンで認可された [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) オペレーションは、`InitiateAuth` レスポンスからの*セッション*トークンと、MFA などのチャレンジに対する回答を送信します。セッショントークン認可は、まだ完了していない認証サイクルの一部であるリクエストを示します。

1. トークンで認可された [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html) オペレーションは、*アクセス*トークンを送信し、記憶されたデバイスをユーザーのプロファイルに追加する書き込みオペレーションを実行します。アクセストークン認可は、ユーザーが認証を完了した後のセルフサービスオペレーションに対するリクエストを示します。

詳細については、「[クライアント側の認証オプション](#amazon-cognito-user-pools-client-side-authentication-flow)」および「[API、OIDC、マネージドログインページの認証についての理解](#user-pools-API-operations)」を参照してください。

------
#### [ Server-side authentication ]

以下は、サーバー側のオペレーションからの一般的なリクエストのシーケンスです。各リクエストには、アプリケーションサーバーに発行された IAM マシン認証情報で署名された [AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) の認可ヘッダーがあります。

1. [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) オペレーションは、ユーザー名とパスワードなどのプライマリ認証情報を送信します。

1. [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) オペレーションは、MFA などのチャレンジに対する回答を送信します。

1. [AdminUpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateDeviceStatus.html) オペレーションは、`AdminInitiateAuth` [レスポンス](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#API_AdminInitiateAuth_ResponseSyntax)のデバイスキーを記憶済みとして設定します。

詳細については、「[サーバー側の認証オプション](#amazon-cognito-user-pools-server-side-authentication-flow)」および「[API、OIDC、マネージドログインページの認証についての理解](#user-pools-API-operations)」を参照してください。

------

認証が失敗するか、Amazon Cognito がユーザーにトークンを発行するまで、ユーザーは連続してチャレンジに回答して認証を進めます。カスタム認証フローをサポートするために、さまざまなチャレンジを含むプロセスで Amazon Cognito でこれらの手順を繰り返すことができます。

**Topics**
+ [サーバー側の認証オプション](#amazon-cognito-user-pools-server-side-authentication-flow)
+ [クライアント側の認証オプション](#amazon-cognito-user-pools-client-side-authentication-flow)
+ [API、OIDC、マネージドログインページの認証についての理解](#user-pools-API-operations)
+ [認可モデル別にグループ化された API オペレーションのリスト](#user-pool-apis-auth-unauth)

## サーバー側の認証オプション
<a name="amazon-cognito-user-pools-server-side-authentication-flow"></a>

ウェブアプリケーションなどの*サーバー側*のアプリケーションは、ブラウザや SSH セッションなどのリモートディスプレイアプリケーションでクライアントがロードする認証をリモートサーバーに実装します。サーバー側のアプリケーションには通常、以下の特性があります。
+ Java、Ruby、Node.js などの言語でサーバーにインストールされたアプリケーションに組み込まれています。
+ ユーザープールの[アプリケーションクライアント](user-pool-settings-client-apps.md)に接続します。アプリケーションクライアントは、*秘密クライアント*と呼ばれるクライアントシークレットを持つ場合があります。
+  AWS 認証情報にアクセスできます。
+ 認証のために[マネージドログイン](cognito-user-pools-managed-login.md)を呼び出すか、 AWS SDK を使用してユーザープール API で IAM で認可されたオペレーションを使用します。
+ 内部のユーザーにサービスを提供するだけでなく、一般のユーザーにサービスを提供する場合もあります。

ユーザープール API を使用したサーバー側のオペレーションでは、パスワード、ワンタイムパスワード、またはパスキーを主要なサインイン要素として使用できます。サーバー側のアプリでのユーザープール認証は、クライアント側のアプリでの認証に似ています。次の点が異なります。
+ サーバー側のアプリケーションは [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) API リクエストを行います。このオペレーションには、 `cognito-idp:AdminInitiateAuth`および を含むアクセス許可を持つ AWS 認証情報が必要です`cognito-idp:AdminRespondToAuthChallenge`。オペレーションは、必要なチャレンジまたは認証結果を返します。
+ アプリケーションはチャレンジを受信すると、[AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) API リクエストを行います。`AdminRespondToAuthChallenge` API オペレーションには AWS 認証情報も必要です。

 AWS 認証情報を使用した Amazon Cognito API リクエストの署名の詳細については、 *AWS 全般のリファレンス*[の署名バージョン 4 の署名プロセス](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)を参照してください。

`AdminInitiateAuth` からのレスポンス `ChallengeParameters` では、`USER_ID_FOR_SRP` 属性 (存在する場合) に、ユーザーのエイリアス (E メールアドレスや電話番号など) ではなく、実際のユーザー名が含まれています。`AdminRespondToAuthChallenge` への呼び出しの `ChallengeResponses` では、このユーザー名を `USERNAME` パラメータで渡す必要があります。

**注記**  
バックエンド管理者実装は、管理者認証フローを使用しているため、フローは記憶されたデバイスをサポートしていません。デバイス追跡が有効にしている場合、管理者認証は成功しますが、アクセストークンの更新に関する呼び出しはいずれも失敗します。

## クライアント側の認証オプション
<a name="amazon-cognito-user-pools-client-side-authentication-flow"></a>

モバイルアプリやその他の*クライアント側*のアプリケーションタイプは、ユーザーのデバイスにインストールされ、認証とユーザーインターフェイスのロジックをローカルで実行します。一般的に、以下の特性があります。
+ React native、Flutter、Swift などの言語で構築され、ユーザーデバイスにデプロイされます。
+ *パブリッククライアント*と呼ばれる、クライアントシークレットを持たないユーザープールの[アプリケーションクライアント](user-pool-settings-client-apps.md)に接続します。
+ IAM 認可の API リクエストを許可する AWS 認証情報にアクセスすることはできません。
+ 認証のために[マネージドログイン](cognito-user-pools-managed-login.md)を呼び出すか、 AWS SDK を使用してユーザープール API でパブリックオペレーションとトークン認可オペレーションを使用します。
+ 一般のユーザーにサービスを提供しており、誰でもサインアップしてサインインできます。

ユーザープール API を使用したクライアント側のオペレーションでは、パスワード、ワンタイムパスワード、またはパスキーを主要なサインイン要素として使用できます。[AWS Amplify](https://docs.amplify.aws/javascript/start/getting-started/) または [AWS SDK](https://aws.amazon.com/developer/tools/) で作成したユーザークライアント側のアプリケーションの場合、以下の手順で動作します。

1. ユーザーがアプリにユーザー名とパスワードを入力します。

1. アプリケーションが、ユーザーのユーザー名と SRP (Secure Remote Password) 詳細を使用して、`InitiateAuth` オペレーションを呼び出します。

   この API オペレーションは、認証のパラメータを返します。
**注記**  
アプリは、 AWS SDK に組み込まれている Amazon Cognito SRP 機能を使用して SRP の詳細を生成します。

1. アプリが `RespondToAuthChallenge` 操作を呼び出します。呼び出しが成功すると、Amazon Cognito からユーザーのトークンが返され、認証フローが完了します。

   Amazon Cognito に必要なチャレンジが別に存在する場合は、`RespondToAuthChallenge` を呼び出してもトークンは返されません。代わりに、呼び出しによってセッションが返されます。

1. `RespondToAuthChallenge` からセッションが返された場合、アプリは `RespondToAuthChallenge` を再度呼び出します。今回の呼び出しには、セッションとチャレンジのレスポンス (MFA コードなど) が使用されます。

## API、OIDC、マネージドログインページの認証についての理解
<a name="user-pools-API-operations"></a>

Amazon Cognito ユーザープールは、いくつかの認証テクノロジーの組み合わせです。ユーザープールは、外部 ID プロバイダー (IdP) に依拠しているパーティであり、OpenID Connect (OIDC) SDK を使用して認証を実装するアプリケーションの IdP です。 AWS SDK JSON ウェブトークン (JWT) の発行者として、OIDC 認証に類似した認証を (ただし、SDK の一部である API メソッドで) 提供します。また、アプリケーションへの安全なエントリポイントにもなります。

サインアップ、サインイン、ユーザープール内のユーザー管理を行うには、2 つのオプションがあります。

1. *マネージドログインページ*とクラシックの*ホストされた UI* には、[マネージドログインのユーザーインタラクティブエンドポイント](managed-login-endpoints.md)と、IdP および依拠しているパーティのロールを処理する[フェデレーションエンドポイント](federation-endpoints.md)が含まれています。これらは、ユーザープールの[ドメインを選択すると](cognito-user-pools-assign-domain.md) Amazon Cognito がアクティブ化するパブリックウェブページのパッケージを構成します。サインアップ、サインイン、パスワード管理、多要素認証 (MFA) のページなど、Amazon Cognito ユーザープールの認証および認可機能をすぐに使い始めるには、マネージドログインの組み込みユーザーインターフェイスを使用します。

   その他のユーザープールエンドポイントを使うと、サードパーティーの ID プロバイダー (IdP) を使った認証が容易になります。行われるサービスには以下が含まれます。

   1. IdPs からの認証済みクレーム用のサービスプロバイダーのコールバックエンドポイント (`saml2/idpresponse` や `oauth2/idpresponse` など)。Amazon Cognito がアプリと IdP の間の中間サービスプロバイダー (SP) である場合、コールバックエンドポイントはサービスを表します。

   1. 環境に関する情報を提供するエンドポイント (`oauth2/userInfo` や `/.well-known/jwks.json` など)。アプリケーションは、OIDC または OAuth 2.0 デベロッパーライブラリを使用してトークンを検証したり、ユーザープロファイルデータを取得したりするときに、これらのエンドポイントを使用します。

1. [Amazon Cognito ユーザープール API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html) は、ウェブアプリやモバイルアプリが独自のカスタムフロントエンドでサインイン情報を収集した後で、ユーザーを認証する一連のツールです。ユーザープール API 認証では、次の JSON ウェブトークンが生成されます。

   1. ユーザーからの検証可能な属性クレームを含む ID トークン。

   1. [AWS サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html)に対する、トークンで認可された API リクエストを作成することをユーザーに許可するアクセストークン。
**注記**  
デフォルトでは、ユーザープール API 認証のアクセストークンには `aws.cognito.signin.user.admin` スコープのみが含まれます。サードパーティー API へのリクエストを認可するなど、スコープを追加したアクセストークンを生成するには、ユーザープールエンドポイントで認証中にスコープをリクエストするか、[トークン生成前の Lambda トリガー](user-pool-lambda-pre-token-generation.md)でカスタムスコープを追加します。アクセストークンのカスタマイズにより、 AWS 請求書にコストがかかります。

   1. 新しい ID トークンとアクセストークンのリクエストを承認し、ユーザー ID とアクセスコントロールのプロパティを更新する更新トークン。

通常はユーザープールのエンドポイントを使用してサインインするフェデレーションユーザーを、プロファイルがユーザープールに対して*ローカル*であるユーザーとリンクできます。ローカルユーザーは、外部 IdP を介したフェデレーションなしに、ユーザープールディレクトリにのみ存在します。[AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html) API リクエストでフェデレーティッド ID をローカルユーザーにリンクすると、そのユーザーはユーザープール API でサインインできます。詳細については、「[フェデレーションユーザーを既存のユーザープロファイルにリンクする](cognito-user-pools-identity-federation-consolidate-users.md)」を参照してください。

Amazon Cognito ユーザープール API には 2 つの用途があります。

1. Amazon Cognito ユーザープールリソースを作成して設定します。たとえば、ユーザープールの作成、 AWS Lambda トリガーの追加、マネージドログインページをホストするユーザープールドメインの設定を行うことができます。

1. ローカルユーザーおよびリンクされたユーザーのサインアップ、サインイン、その他のユーザーオペレーションを実行します。

**Amazon Cognito ユーザープール API を使用したシナリオ例**

1. ユーザーは、アプリで作成した [Create an account] (アカウントを作成) ボタンを選択します。E メールアドレスとパスワードを入力します。

1. アプリケーションは [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) API リクエストを送信し、ユーザープールに新しいユーザーを作成します。

1. アプリケーションは、ユーザーに E メールの確認コードを求めます。ユーザーは、E メールメッセージで受け取ったコードを入力します。

1. アプリは、ユーザーの確認コードを含む [ConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html) API リクエストを送信します。

1. アプリケーションは、ユーザーにユーザー名とパスワードの入力を求め、情報を入力します。

1. アプリは [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API リクエストを送信し、ID トークン、アクセストークン、更新トークンを保存します。アプリは OIDC ライブラリを呼び出して、ユーザーのトークンを管理し、そのユーザーの永続セッションを維持します。

Amazon Cognito ユーザープール API では、IdP を介してフェデレートするユーザーをサインインすることはできません。これらのユーザーは、ユーザープールのエンドポイントを使用して認証する必要があります。マネージドログインを含むユーザープールエンドポイントの詳細については、「[ユーザープールのエンドポイントとマネージドログインのリファレンス](cognito-userpools-server-contract-reference.md)」を参照してください。

フェデレーションユーザーは、マネージドログインから開始して IdP を選択することも、マネージドログインをスキップしてユーザーを IdP に直接送信してサインインさせることもできます。[認可エンドポイント](authorization-endpoint.md) への API リクエストに IdP パラメータが含まれている場合、Amazon Cognito はユーザーを IdP サインインページにそのままリダイレクトします。

**マネージドログインページを使用したシナリオ例**

1. ユーザーは、アプリで作成した [Create an account] (アカウントを作成) ボタンを選択します。

1. マネージドログインでは、デベロッパーの認証情報を登録したソーシャル ID プロバイダーのリストをユーザーに提示します。ユーザーは Apple を選択します。

1. アプリは、プロバイダー名 `SignInWithApple` で [認可エンドポイント](authorization-endpoint.md) へのリクエストを開始します。

1. ユーザーのブラウザで Apple 認証ページが開きます。ユーザーはサインインし、Amazon Cognitoにプロファイル情報の読み取りを許可することを選択します。

1. Amazon Cognito は Apple アクセストークンを確認し、ユーザーの Apple プロファイルを照会します。

1. ユーザーは Amazon Cognito 認可コードをアプリケーションに提示します。

1. アプリケーション内の OIDC ライブラリは、認証コードを[トークンエンドポイント](token-endpoint.md)と交換し、ユーザープールから発行された ID トークン、アクセストークン、更新トークンを保存します。アプリケーションは、OIDC ライブラリを使用してユーザーのトークンを管理し、ユーザーの永続的なセッションを維持します。

ユーザープール API とマネージドログインページは、このガイド全体で説明しているさまざまなシナリオをサポートしています。次のセクションでは、ユーザープール API がサインアップ、サインイン、およびリソース管理の要件をサポートするクラスにさらにどのように分類されるかを見ていきます。

## 認可モデル別にグループ化された API オペレーションのリスト
<a name="user-pool-apis-auth-unauth"></a>

Amazon Cognito ユーザープール API は、リソース管理インターフェイスとユーザー向け認証および認可インターフェイスの両方であり、運用に続く承認モデルを組み合わせます。API オペレーションによっては、IAM 認証情報、アクセストークン、セッショントークン、クライアントシークレット、またはこれらの組み合わせを使用して認可を行う必要がある場合があります。多くのユーザー認証および認可操作では、リクエストの認証済みバージョンと認証されていないバージョンを選択できます。認証されていない操作は、モバイルアプリなど、ユーザーに配布するアプリのセキュリティ上のベストプラクティスです。コードにシークレットを含める必要はありません。

IAM ポリシーでは、[IAM で認可された管理オペレーション](#user-pool-apis-auth-unauth-sigv4-management) と [IAM で認可されたユーザーオペレーション](#user-pool-apis-auth-unauth-sigv4-user) にのみアクセス許可を割り当てることができます。

### IAM で認可された管理オペレーション
<a name="user-pool-apis-auth-unauth-sigv4-management"></a>

IAM で認可された管理オペレーションでは、 AWS マネジメントコンソールで行う場合と同様に、ユーザープールとアプリケーションクライアントの設定を変更および表示します。

例えば、[UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API リクエストでユーザープールを変更するには、リソースを更新するための AWS 認証情報と IAM アクセス許可を提示する必要があります。

 AWS Command Line Interface (AWS CLI) または AWS SDK でこれらのリクエストを承認するには、リクエストに IAM 認証情報を追加する環境変数またはクライアント設定を使用して環境を設定します。詳細については、『』の[AWS 「認証情報 AWS を使用した ](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys)へのアクセス」を参照してください*AWS 全般のリファレンス*。Amazon Cognito ユーザープール API の[サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html)にリクエストを直接送信することもできます。リクエストのヘッダーに埋め込む AWS 認証情報を使用して、これらのリクエストを承認または*署名*する必要があります。詳細については、[AWS 「 API リクエストの署名](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)」を参照してください。


| IAM で認可された管理オペレーション | 
| --- |
| [AddCustomAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AddCustomAttributes.html) | 
| [CreateGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateGroup.html) | 
| [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) | 
| [CreateResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateResourceServer.html) | 
| [CreateUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserImportJob.html) | 
| [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) | 
| [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) | 
| [CreateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolDomain.html) | 
| [DeleteGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteGroup.html) | 
| [DeleteIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteIdentityProvider.html) | 
| [DeleteResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteResourceServer.html) | 
| [DeleteUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPool.html) | 
| [DeleteUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPoolClient.html) | 
| [DeleteUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPoolDomain.html) | 
| [DescribeIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html) | 
| [DescribeResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeResourceServer.html) | 
| [DescribeRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html) | 
| [DescribeUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserImportJob.html) | 
| [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html) | 
| [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html) | 
| [DescribeUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolDomain.html) | 
| [GetCSVHeader](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetCSVHeader.html) | 
| [GetGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetGroup.html) | 
| [GetIdentityProviderByIdentifier](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetIdentityProviderByIdentifier.html) | 
| [GetSigningCertificate](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetSigningCertificate.html) | 
| [GetUICustomization](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUICustomization.html) | 
| [GetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserPoolMfaConfig.html) | 
| [ListGroups](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListGroups.html) | 
| [ListIdentityProviders](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListIdentityProviders.html) | 
| [ListResourceServers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListResourceServers.html) | 
| [ListTagsForResource](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListTagsForResource.html) | 
| [ListUserImportJobs](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserImportJobs.html) | 
| [ListUserPoolClients](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserPoolClients.html) | 
| [ListUserPools](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserPools.html) | 
| [ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) | 
| [ListUsersInGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsersInGroup.html) | 
| [SetRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html) | 
| [SetUICustomization](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUICustomization.html) | 
| [SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html) | 
| [StartUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartUserImportJob.html) | 
| [StopUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StopUserImportJob.html) | 
| [TagResource](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_TagResource.html) | 
| [UntagResource](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UntagResource.html) | 
| [UpdateGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateGroup.html) | 
| [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html) | 
| [UpdateResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateResourceServer.html) | 
| [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) | 
| [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html) | 
| [UpdateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html) | 

### IAM で認可されたユーザーオペレーション
<a name="user-pool-apis-auth-unauth-sigv4-user"></a>

IAM で認可されたユーザーオペレーションは、ユーザーのサインアップ、サインイン、認証情報の管理、変更、表示を行います。

例えば、ウェブフロントエンドをバックアップするサーバー側のアプリケーション層を設定できます。これは、Amazon Cognito リソースへの特権アクセスで信頼する OAuth 機密クライアントです。ユーザーをアプリに登録するには、サーバーで [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) API リクエストに AWS 認証情報を含めることができます。OAuth クライアントタイプの詳細については、「*The OAuth 2.0 Authorization Framework*」の「[Client Types](https://www.rfc-editor.org/rfc/rfc6749#section-2.1)」を参照してください。

 AWS CLI または AWS SDK でこれらのリクエストを認可するには、環境変数またはリクエストに IAM 認証情報を追加するクライアント設定を使用してサーバー側のアプリケーション環境を設定します。詳細については、『』の[AWS 「認証情報 AWS を使用した へのアクセス](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys)」を参照してください*AWS 全般のリファレンス*。Amazon Cognito ユーザープール API の[サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html)にリクエストを直接送信することもできます。リクエストのヘッダーに埋め込む AWS 認証情報を使用して、これらのリクエストを承認または*署名*する必要があります。詳細については、[AWS 「 API リクエストの署名](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)」を参照してください。

アプリケーションクライアントにクライアントシークレットがある場合は、IAM 認証情報と、オペレーションによっては、`AuthParameters` で `SecretHash` パラメータまたは `SECRET_HASH` 値の両方を指定する必要があります。詳細については、「[シークレットハッシュ 値の計算](signing-up-users-in-your-app.md#cognito-user-pools-computing-secret-hash)」を参照してください。


| IAM で認可されたユーザーオペレーション | 
| --- |
| [AdminAddUserToGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminAddUserToGroup.html) | 
| [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) | 
| [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) | 
| [AdminDeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDeleteUser.html) | 
| [AdminDeleteUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDeleteUserAttributes.html) | 
| [AdminDisableProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableProviderForUser.html) | 
| [AdminDisableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableUser.html) | 
| [AdminEnableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminEnableUser.html) | 
| [AdminForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminForgetDevice.html) | 
| [AdminGetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetDevice.html) | 
| [AdminGetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetUser.html) | 
| [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) | 
| [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html) | 
| [AdminListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html) | 
| [AdminListGroupsForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListGroupsForUser.html) | 
| [AdminListUserAuthEvents](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListUserAuthEvents.html) | 
| [AdminRemoveUserFromGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRemoveUserFromGroup.html) | 
| [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) | 
| [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) | 
| [AdminSetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html) | 
| [AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) | 
| [AdminSetUserSettings](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserSettings.html) | 
| [AdminUpdateAuthEventFeedback](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateAuthEventFeedback.html) | 
| [AdminUpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateDeviceStatus.html) | 
| [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) | 
| [AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html) | 

### 認証されていないユーザーオペレーション
<a name="user-pool-apis-auth-unauth-unauth"></a>

認証されていないユーザーオペレーションでは、ユーザーのサインアップ、サインイン、およびパスワードのリセットが開始されます。インターネット上の誰でもがアプリケーションにサインアップしてサインインできるようにする場合は、認証されていない API オペレーション、または*パブリック* API オペレーションを使用します。

例えば、アプリケーションにユーザーを登録するには、シークレットへの特権アクセスを提供しない OAuth パブリッククライアントを配布できます。このユーザーは、認証されていない API オペレーション [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) で登録できます。

 AWS SDK で開発したパブリッククライアントでこれらのリクエストを送信するには、認証情報を設定する必要はありません。また、Amazon Cognito ユーザープール API の[サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html)に、追加の認可なしでリクエストを直接送信することもできます。

アプリケーションクライアントにクライアントシークレットがある場合は、オペレーションによっては、`AuthParameters` で `SecretHash` パラメータまたは `SECRET_HASH` 値を指定する必要があります。詳細については、「[シークレットハッシュ 値の計算](signing-up-users-in-your-app.md#cognito-user-pools-computing-secret-hash)」を参照してください。


| 認証されていないユーザーオペレーション | 
| --- |
| [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) | 
| [ConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html) | 
| [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) | 
| [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html) | 
| [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html) | 
| [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | 

### トークン認証によるユーザーオペレーション
<a name="user-pool-apis-auth-unauth-token-auth"></a>

トークン認証によるユーザーオペレーションは、ユーザーがサインインしたか、サインインプロセスを開始した後に、ユーザーのサインアウト、認証情報の管理、変更、表示を行います。アプリケーション内でシークレットを配布しない場合や、ユーザー自身の認証情報でリクエストを認可する場合は、トークン認可による API オペレーションを使用してください。ユーザーがサインインを完了した場合、ユーザーのトークン認可された API リクエストをアクセストークンで認可する必要があります。ユーザーがサインインプロセス中である場合は、Amazon Cognito が前のリクエストへのレスポンスで返したセッショントークンを使用して、トークン認可による API リクエストを認可する必要があります。

例えば、パブリッククライアントでは、書き込みアクセスをユーザー自身のプロファイルのみに制限する方法でユーザーのプロファイルを更新する場合があります。この更新を行うには、クライアントが [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) API リクエストにユーザーのアクセストークンを含めることができます。

 AWS SDK で開発したパブリッククライアントでこれらのリクエストを送信するには、認証情報を設定する必要はありません。リクエストには `AccessToken` または `Session` パラメータを含めてください。Amazon Cognito ユーザープール API の[サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html)にリクエストを直接送信することもできます。サービスエンドポイントへのリクエストを承認するには、リクエストの POST 本文にアクセストークンまたはセッショントークンを含めます。

トークン認証オペレーションの API リクエストに署名するには、アクセストークンをリクエストの `Authorization` ヘッダーとして `Bearer <Base64-encoded access token>` 形式で含めます。


| トークン認証によるユーザーオペレーション | AccessToken | Session | 
| --- |--- |--- |
| [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) |  | ✓ | 
| [ChangePassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ChangePassword.html) | ✓ |  | 
| [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html) | ✓ |  | 
| [StartWebAuthnRegistration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartWebAuthnRegistration.html) | ✓ |  | 
| [CompleteWebAuthnRegistration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CompleteWebAuthnRegistration.html) | ✓ |  | 
| [DeleteWebAuthnCredential](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteWebAuthnCredential.html) | ✓ |  | 
| [ListWebAuthnCredentials](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListWebAuthnCredentials.html) | ✓ |  | 
| [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) | ✓ |  | 
| [DeleteUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserAttributes.html) | ✓ |  | 
| [DeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUser.html) | ✓ |  | 
| [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html) | ✓ |  | 
| [ForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgetDevice.html) | ✓ |  | 
| [GetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetDevice.html) | ✓ |  | 
| [ListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListDevices.html) | ✓ |  | 
| [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html) | ✓ |  | 
| [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) | ✓ |  | 
| [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) | ✓ |  | 
| [SetUserSettings](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserSettings.html) | ✓ |  | 
| [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) | ✓ |  | 
| [GlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html) | ✓ |  | 
| [UpdateAuthEventFeedback](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateAuthEventFeedback.html) |  | ✓ | 
| [AssociateSoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html) | ✓ | ✓ | 
| [VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html) | ✓ | ✓ | 
| [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)¹ |  |  | 
| [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)¹ |  |  | 

¹ `RevokeToken` と `GetTokensFromRefreshToken` は、更新トークンを認証パラメータとして受け取ります。更新トークンは、認証トークンとして、またターゲットリソースとして機能します。