

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

# 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` を追加します。クライアントベースの認証フローを許可するために、追加のユーザープール設定を行う必要はありません。