

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

# TOTP ソフトウェアトークン MFA
<a name="user-pool-settings-mfa-totp"></a>

ユーザープールで TOTP ソフトウェアトークン MFA を設定すると、ユーザーはユーザー名とパスワードでサインインし、TOTP を使用して認証を完了します。ユーザーがユーザー名とパスワードを設定して検証した後、MFA の TOTP ソフトウェアトークンを有効化できます。アプリケーションでユーザーのサインインに Amazon Cognito のマネージドログインを使用する場合、ユーザーはユーザー名とパスワードを送信し、別のサインインページで TOTP パスワードを送信します。

ユーザープールの TOTP MFA は、Amazon Cognito コンソールでアクティブ化することも、Amazon Cognito API オペレーションを使用してもかまいません。ユーザープールレベルでは、[SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html) を呼び出すことで、MFA を設定して TOTP MFA を有効化できます。

**注記**  
TOTP ソフトウェアトークン MFA がユーザープールに対して有効になっていない場合は、Amazon Cognito で、ユーザーをトークンに関連付けたり、トークンで検証することができません。この場合、ユーザーは`SoftwareTokenMFANotFoundException`説明による例外`Software Token MFA has not been enabled by the userPool`を受診します。ソフトウェアトークン MFA が後にユーザープールに対して非アクティブ化された場合、以前に TOTP トークンを関連付けて検証したユーザーは、引き続き MFA で使用することができます。

ユーザーの TOTP の設定には複数のステップが伴います。ユーザーはシークレットコードを受け取り、ワンタイムパスワードを入力して、このコードを検証します。次に、ユーザーの TOTP MFA を有効にするか、ユーザーの優先 MFA メソッドとして TOTP を設定することができます。

ユーザープールで TOTP MFA を必須に設定した場合、ユーザーがマネージドログインでアプリケーションにサインアップするときに、Amazon Cognito はユーザープロセスを自動化します。Amazon Cognito は、ユーザーに MFA メソッドの選択を促し、Authenticator アプリケーションを設定するための QR コードを表示し、MFA 登録を確認します。ユーザーが SMS と TOTP MFA のどちらかを選択できるようにしたユーザープールでは、Amazon Cognito もユーザーに選択肢を提示します。

**重要**  
ユーザープールに関連付けられた AWS WAF ウェブ ACL があり、ウェブ ACL のルールが CAPTCHA を提示すると、マネージドログイン TOTP 登録で回復不可能なエラーが発生する可能性があります。CAPTCHA アクションを含み、マネージドログインの TOTP には影響しないルールを作成するには、「[マネージドログイン TOTP MFA 用の AWS WAF ウェブ ACL の設定](#totp-waf)」を参照してください。 AWS WAF ウェブ ACL と Amazon Cognito の詳細については、「[AWS WAF ウェブ ACL をユーザープールに関連付ける](user-pool-waf.md)」を参照してください。

 AWS SDK と [Amazon Cognito ユーザープール API を使用してカスタムビルド UI に TOTP MFA を実装するには、](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html)「」を参照してください[ユーザーの TOTP MFA の設定](#totp-mfa-set-up-api)。

MFA をユーザープールに追加するには、「[ユーザープールに MFA を追加します](user-pool-settings-mfa.md)」を参照してください。

**TOTP MFA 考慮事項と制約事項**

1. Amazon Cognito は、TOTP コードを生成する Authenticator アプリケーションを介してソフトウェアトークン MFA をサポートします。Amazon Cognito はハードウェアベースの MFA をサポートしていません。

1. TOTP を設定していないユーザーに対してユーザープールが TOTP を必要とする場合、ユーザーはワンタイムアクセストークンを受け取り、アプリはそれを使ってユーザーの TOTP MFA を有効化することができます。後続のサインイン試行は、ユーザーが追加の TOTP サインイン要素を登録するまで失敗します。
   + ユーザーが `SignUp` API オペレーションまたはマネージドログインを使用してユーザープールにサインアップすると、サインアップを完了したときに 1 回限りのトークンを受け取ります。
   + ユーザーを作成し、ユーザーが初期パスワードを設定すると、Amazon Cognito はマネージドログインからユーザーに 1 回限りのトークンを発行します。ユーザーに永続的なパスワードを設定すると、ユーザーが最初にサインインしたときに Amazon Cognito が 1 回限りのトークンを発行します。
   + Amazon Cognito は、[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) API オペレーションでサインインする管理者が作成したユーザーには 1 回限りのトークンを発行しません。ユーザーが初期パスワードの設定のチャレンジに成功した後、またはユーザーに永続的なパスワードを設定すると、Amazon Cognito はすぐに MFA の設定をユーザーに要求します。

1. MFA を必須としているユーザープールのユーザーは、ワンタイムアクセストークンを既に受け取っていても、TOTP MFA を設定していない場合、MFA を設定するまでマネージドログインでサインインできません。アクセストークンの代わりに、[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) に対する `MFA_SETUP` チャレンジの `session` レスポンス値を、[AssociateSoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html) リクエストで使用できます。

1. ユーザーが TOTP を設定した場合は、TOTP が後でユーザープールに対して無効にされた場合でも、その TOTP を MFA に使用できます。

1. Amazon Cognito は、HMAC-SHA1 ハッシュ関数を使用してコードを生成する認証アプリケーションからの TOTP のみを受け入れます。SHA-256 ハッシュで生成されたコードは `Code mismatch` エラーを返します。

## ユーザーの TOTP MFA の設定
<a name="totp-mfa-set-up-api"></a>

ユーザーが最初にサインインすると、アプリはワンタイムアクセストークンを使用して TOTP プライベートキーを生成し、テキスト形式または QR コード形式でユーザーに提示します。ユーザーは Authenticator アプリケーションを設定し、その後のサインイン試行の TOTP を提供します。アプリケーションまたはマネージドログインは、この TOTP を MFA チャレンジレスポンスで TOTP を Amazon Cognito に提示します。

状況によっては、マネージドログインにより、新規ユーザーに TOTP Authenticator を設定するように求めます。詳細については、「[ユーザー実行時の MFA ロジックの詳細](user-pool-settings-mfa.md#user-pool-settings-mfa-user-outcomes)」を参照してください。

**Topics**
+ [TOTP ソフトウェアトークンを関連付ける](#user-pool-settings-mfa-totp-associate-token)
+ [TOTP トークンを検証](#user-pool-settings-mfa-totp-verification)
+ [TOTP MFA でのサインイン](#user-pool-settings-mfa-totp-sign-in)
+ [TOTP トークンを削除](#user-pool-settings-mfa-totp-remove)

### TOTP ソフトウェアトークンを関連付ける
<a name="user-pool-settings-mfa-totp-associate-token"></a>

TOTP トークンを関連付けるには、ワンタイムパスワードで検証する必要のあるシークレットコードをユーザーに送信する必要があります。トークンの関連付けには 3 つのステップが必要です。

1. ユーザーが TOTP ソフトウェアトークン MFA を選択したら、[AssociateSoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html) を呼び出して、一意に生成された共有シークレットキーコードをユーザーアカウントに返します。AssociateSoftwareToken は、アクセストークンまたはセッション文字列を使用して承認できます。

1. アプリは、プライベートキーまたはプライベートキーから生成した QR コードをユーザーに提示します。ユーザーは、Google Authenticator などの TOTP 生成アプリにプライベートキーを入力する必要があります。入力するには、アプリケーションでプライベートキーから生成した QR コードをスキャンするか、手動で入力します。

1. ユーザーがキーを入力するか、Google Authenticator などの認証システムアプリケーションに QR コードをスキャンすると、アプリがコードの生成を開始します。

### TOTP トークンを検証
<a name="user-pool-settings-mfa-totp-verification"></a>

次に、TOTP トークンを検証します。以下のように、ユーザーからサンプルコードをリクエストし、Amazon Cognito サービスに提供して、ユーザーが TOTP コードを正常に生成していることを確認します。

1. アプリは、ユーザーが認証システムアプリケーションを適切に設定したことを示すコードの入力をユーザーに促します。

1. ユーザーの認証システムアプリケーションは、一時的なパスワードを表示します。認証システムアプリケーションは、ユーザーに与えたシークレットキーに基づいてパスワードを作成します。

1. ユーザーは一時パスワードを入力します。アプリは、`[VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html)` API リクエストで一時パスワードを Amazon Cognito に渡します。

1.  Amazon Cognito は、ユーザーに関連付けられたシークレットキーを保持し、TOTP を生成し、ユーザーが指定したシークレットキーと比較します。一致した場合は、`VerifySoftwareToken` は `SUCCESS` レスポンスを返します。

1. Amazon Cognito は TOTP 要素をユーザーに関連付けます。

1. `VerifySoftwareToken` オペレーションが `ERROR` レスポンスを返した場合は、ユーザーのクロックが正しいこと、およびリトライの最大回数を超えていないことを確認します。Amazon Cognito は、試行の前後 30 秒以内の TOTP トークンを受け入れ、マイナークロックスキューを考慮します。問題が解決したら、VerifySoftwareToken オペレーションをもう一度試してください。

### TOTP MFA でのサインイン
<a name="user-pool-settings-mfa-totp-sign-in"></a>

この時点で、ユーザーは時間ベースのワンタイムパスワードを使用したサインインを行います。以下はその手順です。

1. ユーザーはユーザー名とパスワードを入力してクライアントアプリにサインインします。

1. TOTP MFA チャレンジが呼び出され、アプリが一時パスワードを入力するプロンプトをユーザーに表示します。

1. ユーザーは、関連付けられた TOTP 生成アプリから一時パスワードを取得します。

1. ユーザーが TOTP コードをクライアントアプリに入力します。アプリは、コードを検証するよう Amazon Cognito サービスに通知します。サインインごとに、[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) を呼び出して新しい TOTP 認証チャレンジに対するレスポンスを取得する必要があります。

1. Amazon Cognito によってトークンが検証されると、サインインが成功し、ユーザーは認証フローを続行します。

### TOTP トークンを削除
<a name="user-pool-settings-mfa-totp-remove"></a>

最後に、アプリは TOTP 設定を非アクティブ化することをユーザーに許可する必要があります。現在、ユーザーの TOTP ソフトウェアトークンを削除することはできません。ユーザーのソフトウェアトークンを置き換えるには、新しいソフトウェアトークンを関連付けて検証します。ユーザーの TOTP MFA を無効にするには、[SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) を呼び出して、MFA を使用しないか、SMS MFA のみを使用するようにユーザーを変更します。

1. MFA をリセットしたいユーザーのためのインターフェイスをアプリケーション内に作成します。このインターフェイスでユーザーにパスワードの入力を求めます。

1. Amazon Cognito が TOTP MFA チャレンジを返す場合は、ユーザーの MFA 設定を [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) で更新します。

1. アプリで、MFA を非アクティブ化したことをユーザーに伝え、再度サインインするよう促します。

## マネージドログイン TOTP MFA 用の AWS WAF ウェブ ACL の設定
<a name="totp-waf"></a>

ユーザープールに関連付けられた AWS WAF ウェブ ACL があり、ウェブ ACL のルールが CAPTCHA を示している場合、マネージドログイン TOTP 登録で回復不可能なエラーが発生する可能性があります。 AWS WAF CAPTCHA ルールは、マネージドログインとクラシックホスト UI の TOTP MFA *にのみ*この効果があります。SMS MFA は影響を受けません。

CAPTCHA ルールにより、ユーザーが TOTP MFA の設定を完了できない場合、Amazon Cognito は次のエラーを表示します。

Request not allowed due to WAF captcha. (WAF captcha によりリクエストは許可されていません。)

このエラーは、 がユーザープールがバックグラウンドで行う [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) API リクエストに応答して CAPTCHA AWS WAF をプロンプトすると発生します。CAPTCHA アクションを含み、マネージドログインページの TOTP に影響しないルールを作成するには、ルール内の CAPTCHA アクションから `AssociateSoftwareToken` と `VerifySoftwareToken` の `x-amzn-cognito-operation-name` ヘッダー値を除外します。

次のスクリーンショットは、`x-amzn-cognito-operation-name`ヘッダー値が `AssociateSoftwareToken`または でないすべてのリクエストに CAPTCHA アクションを適用する AWS WAF ルールの例を示しています`VerifySoftwareToken`。

![\[または のx-amzn-cognito-operation-nameヘッダー値を持たないすべてのリクエストに CAPTCHA AssociateSoftwareToken アクションを適用する AWS WAF ルールのスクリーンショットVerifySoftwareToken。\]](http://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/cup-WAF-rule-TOTP.png)


 AWS WAF ウェブ ACLs「」を参照してください[AWS WAF ウェブ ACL をユーザープールに関連付ける](user-pool-waf.md)。 Amazon Cognito