

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 MFA 新增到使用者集區
<a name="user-pool-settings-mfa"></a>

MFA 會將*您具有*身分驗證因素的項目新增至*您知道*的初始因素，通常是使用者名稱和密碼。您可以選擇簡訊、電子郵件訊息或以時間為基礎的一次性密碼 (TOTP) 作為其他因素，以登入具有密碼作為其主要身分驗證因素的使用者。

多重要素驗證 (MFA) 可提高應用程式中[本機使用者](cognito-terms.md#terms-localuser)的安全性。如果是[聯合身分使用者](cognito-terms.md#terms-federateduser)，Amazon Cognito 會將所有身分驗證程序委派給 IdP，而不會為他們提供其他身分驗證因素。

**注意**  
新使用者首次登入您的應用程式時，Amazon Cognito 會發出 OAuth 2.0 權杖，即使您的使用者集區需要 MFA 也是如此。您的使用者首次登入時的第二個身分驗證要素是確認 Amazon Cognito 傳送給他們的驗證訊息。如果您的使用者集區需要 MFA，Amazon Cognito 會提示您的使用者註冊一個額外的登入要素，以便在第一次之後的每次登入嘗試期間使用。

透過自適應身分驗證，您可以將使用者集區設定為需要額外的身分驗證因素，以回應增加的風險層級。若要將適應性身分驗證新增到使用者集區，請參閱 [具有威脅防護的進階安全性](cognito-user-pool-settings-threat-protection.md)。

當您將使用者集區的多重要素驗證 (MFA) 設定為 `required` 時，所有使用者都必須完成 MFA 才能登入。若要登入，每個使用者必須至少設定一個 MFA 因素。需要 MFA 時，您必須在使用者加入中包含 MFA 設定，以便您的使用者集區允許他們登入。

當您將 MFA 設定為必要時，受管登入會提示使用者設定 MFA。當您在使用者集區中將 MFA 設定為選用時，受管登入不會提示使用者。若要使用選用的 MFA，您必須在應用程式中建置一個介面來提示您的使用者選取要設定 MFA，然後引導他們進行 API 輸入，以驗證他們的另一項登入要素。

**Topics**
+ [使用者集區 MFA 的須知事項](#user-pool-settings-mfa-prerequisites)
+ [使用者 MFA 偏好設定](#user-pool-settings-mfa-preferences)
+ [使用者執行時間的 MFA 邏輯詳細資訊](#user-pool-settings-mfa-user-outcomes)
+ [設定使用者集區以進行多重驗證](#user-pool-configuring-mfa)
+ [SMS 和電子郵件訊息 MFA](user-pool-settings-mfa-sms-email-message.md)
+ [TOTP 軟體權杖 MFA](user-pool-settings-mfa-totp.md)

## 使用者集區 MFA 的須知事項
<a name="user-pool-settings-mfa-prerequisites"></a>

設定 MFA 之前，請考慮下列事項：
+ 使用者可以擁有 MFA *或使用*無密碼因素登入，但有一個例外：當您在使用者集區 `MULTI_FACTOR_WITH_USER_VERIFICATION`中`FactorConfiguration`將 設定為 時，具有使用者驗證的通行金鑰可以滿足 MFA 要求`WebAuthnConfiguration`。
  + 您無法在支援[一次性密碼](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)的使用者集區中將 MFA 設定為必要。
  + 當使用者集區中需要 MFA `AllowedFirstAuthFactors`時，您無法將 `EMAIL_OTP`或 `SMS_OTP` 新增至 。您可以在 `FactorConfiguration` 設定為 `WEB_AUTHN`時新增 `MULTI_FACTOR_WITH_USER_VERIFICATION`。
  + 當使用者集區中需要 MFA 時，[選擇型登入](authentication-flows-selection-sdk.md#authentication-flows-selection-choice)只會在所有應用程式用戶端中提供`PASSWORD`和`PASSWORD_SRP`因素。如需使用者名稱密碼流程的詳細資訊，請參閱本指南的**身分驗證**章節[使用持久性密碼和安全承載登入](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp)中的 [使用持久性密碼登入](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password)和 。
  + 在 MFA 為選用的使用者集區中，設定 MFA 因素的使用者只能在選擇型登入中使用使用者名稱密碼驗證流程登入。這些使用者符合所有[用戶端型登入](authentication-flows-selection-sdk.md#authentication-flows-selection-client)流程的資格。

  下表說明使用者集區 MFA 設定和 MFA 因素的使用者組態對使用者無密碼因素登入能力的影響。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/user-pool-settings-mfa.html)
+ 使用者偏好的 MFA 方法會影響他們可以用來復原密碼的方法。偏好的 MFA 為電子郵件訊息的使用者無法透過電子郵件接收密碼重設碼。偏好的 MFA 是 SMS 訊息的使用者無法透過 SMS 接收密碼重設碼。

  當使用者不符合您偏好的密碼重設方法時，[您的密碼復原](managing-users-passwords.md#user-pool-password-reset-and-recovery)設定必須提供替代選項。例如，您的復原機制可能以電子郵件為第一優先，而電子郵件 MFA 可能是使用者集區中的選項。在此情況下，請新增簡訊帳戶復原做為第二個選項，或使用管理 API 操作來重設這些使用者的密碼。

  Amazon Cognito 會回應來自沒有有效復原方法且`InvalidParameterException`錯誤回應的使用者的密碼重設請求。

  [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#API_UpdateUserPool_Examples) 的請求內文範例說明 `AccountRecoverySetting`，當無法重設密碼時，使用者可以透過簡訊恢復。
+ 使用者無法在相同的電子郵件地址或電話號碼接收 MFA 和密碼重設代碼。如果他們使用來自 MFA 電子郵件訊息的一次性密碼 (OTPs)，則必須使用 SMS 訊息進行帳戶復原。如果他們使用來自 MFA 簡訊的 OTPs，則必須使用電子郵件訊息進行帳戶復原。在具有 MFA 的使用者集區中，如果使用者擁有電子郵件地址的屬性但沒有電話號碼，或是電話號碼卻沒有電子郵件地址，則可能無法完成自助式密碼復原。

  若要防止使用者無法使用此組態在使用者集區中重設密碼的狀態，請視需要設定 `email`和 `phone_number` 屬性。 [使用使用者屬性](user-pool-settings-attributes.md)或者，您可以設定程序，在使用者註冊或管理員建立使用者設定檔時，一律收集和設定這些屬性。當使用者具有這兩個屬性時，Amazon Cognito 會自動將密碼重設代碼傳送至*不是*使用者 MFA 因素的目的地。
+ 當您在使用者集區中啟用 MFA 並選擇**簡訊**或**電子郵件訊息**作為第二個因素時，您可以將訊息傳送到尚未在 Amazon Cognito 中驗證的電話號碼或電子郵件屬性。使用者完成 MFA 後，Amazon Cognito 會將其 `phone_number_verified`或 `email_verified` 屬性設定為 `true`。
+ 嘗試提供 MFA 代碼失敗五次之後，Amazon Cognito 會啟動指數遞增封鎖持續時間程序，如 [失敗登入嘗試的鎖定行為](authentication.md#authentication-flow-lockout-behavior) 中所述。
+ 如果您的帳戶位於 中的 SMS 沙盒中 AWS 區域 ，其中包含使用者集區的 Amazon Simple Notification Service (Amazon SNS) 資源，您必須先在 Amazon SNS 中驗證電話號碼，才能傳送簡訊。如需詳細資訊，請參閱[Amazon Cognito 使用者集區的簡訊設定](user-pool-sms-settings.md)。
+ 若要變更使用者的 MFA 狀態以回應具有威脅防護的偵測到事件，請在 Amazon Cognito 使用者集區主控台中啟用 MFA 並將其設定為選用。如需詳細資訊，請參閱[具有威脅防護的進階安全性](cognito-user-pool-settings-threat-protection.md)。
+ 電子郵件和簡訊要求使用者分別擁有電子郵件地址和電話號碼屬性。您可以在使用者集區中將 `email`或 `phone_number` 設定為必要屬性。在此情況下，除非使用者提供電話號碼，否則無法完成註冊。如果您未將這些屬性設定為必要，但想要執行電子郵件或簡訊 MFA，請在使用者註冊時提示他們輸入電子郵件地址或電話號碼。最佳實務是將使用者集區設定為自動傳送訊息給使用者，以[驗證這些屬性](signing-up-users-in-your-app.md)。

  如果使用者已成功透過簡訊或電子郵件訊息收到臨時密碼，並在 [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) API 請求中傳回該代碼，Amazon Cognito 會將電話號碼或電子郵件地址計為已驗證。或者，您的團隊可以設定電話號碼，並使用執行 [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API 請求的管理應用程式將其標記為已驗證。
+ 如果您已將 MFA 設定為必要，並啟用多個身分驗證因素，Amazon Cognito 會提示新使用者選取他們要使用的 MFA 因素。使用者必須擁有設定簡訊 MFA 的電話號碼，以及設定電子郵件訊息 MFA 的電子郵件地址。如果使用者未針對任何可用的訊息型 MFA 定義 屬性，Amazon Cognito 會提示他們設定 TOTP MFA。選擇 MFA 因素 (`SELECT_MFA_TYPE`) 和設定所選因素 (`MFA_SETUP`) 的提示會做為 [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 操作的挑戰回應傳入 。

## 使用者 MFA 偏好設定
<a name="user-pool-settings-mfa-preferences"></a>

使用者可以設定多個 MFA 因素。只有一個可以處於作用中狀態。您可以在使用者集區設定或從使用者提示中選擇使用者的有效 MFA 偏好設定。當使用者集區設定及其自己的使用者層級設定符合下列條件時，使用者集區會提示使用者輸入 MFA 代碼：

1. 您可以在使用者集區中將 MFA 設定為選用或必要。

1. 使用者具有有效的 `phone_number``email`或 屬性，或已設定 TOTP 的驗證器應用程式。

1. 至少一個 MFA 因素處於作用中狀態。

1. 一個 MFA 因素設定為偏好。

### 防止使用相同的登入和 MFA 因素
<a name="user-pool-settings-mfa-preferences-same-factor"></a>

您可以設定您的使用者集區，讓一個登入因素成為部分或所有使用者唯一可用的登入和 MFA 選項。當您的主要登入使用案例是電子郵件或簡訊一次性密碼 (OTPs) 時，可能會發生此結果。在下列情況下，使用者的偏好 MFA 可能與其登入類型相同：
+ 使用者集區中需要 MFA。
+ 電子郵件和簡訊 OTP 可在使用者集區中使用登入*和* MFA 選項。
+ 使用者使用電子郵件或簡訊 OTP 登入。
+ 它們具有電子郵件地址屬性，但沒有電話號碼屬性，或電話號碼屬性，但沒有電子郵件地址屬性。

在此案例中，使用者可以使用電子郵件 OTP 登入，並使用電子郵件 OTP 完成 MFA。此選項會取消 MFA 的基本函數。使用一次性密碼登入的使用者必須能夠使用與 MFA 不同的傳遞方法進行登入。當使用者同時擁有簡訊和電子郵件選項時，Amazon Cognito 會自動指派不同的因素。例如，當使用者使用電子郵件 OTP 登入時，他們偏好的 MFA 是 SMS OTP。

當您的使用者集區同時支援登入和 MFA 的 OTP 身分驗證時，請採取下列步驟來處理相同因素身分驗證。

1. 啟用電子郵件和簡訊 OTP 作為登入因素。

1. 啟用電子郵件和簡訊 OTP 做為 MFA 因素。

1. 收集

### 使用者集區設定及其對 MFA 選項的影響
<a name="user-pool-settings-mfa-preferences-things-to-know"></a>

使用者集區的組態會影響使用者可以選擇的 MFA 方法。以下是一些使用者集區設定，會影響使用者設定 MFA 的能力。
+ 在 Amazon Cognito 主控台**登入**功能表中的**多重要素驗證**組態中，您可以將 MFA 設定為選用或必要，或將其關閉。此設定的 API 對等項目是 `CreateUserPool`、 `UpdateUserPool`和 的 [MfaConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-MfaConfiguration) 參數`SetUserPoolMfaConfig`。

  此外，在**多重要素驗證**組態中，**MFA 方法**設定會決定使用者可以設定的 MFA 要素。此設定的 API 對等項目是 [SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html) 操作。
+ 在**登入**選單的**使用者帳戶復原**下，您可以設定使用者集區傳送訊息給忘記密碼的使用者的方式。使用者的 MFA 方法不能具有與忘記密碼代碼的使用者集區交付方法相同的 MFA 交付方法。忘記密碼交付方法的 API 參數是 `CreateUserPool`和 的 [AccountRecoverySetting](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AccountRecoverySetting) 參數`UpdateUserPool`。

  例如，當復原選項為**僅限電子郵件時，使用者無法設定電子郵件** MFA。這是因為您無法啟用電子郵件 MFA，且只能在相同的使用者集區中將復原選項設定為**電子郵件**。當您將此選項設定為**電子郵件時，否則 SMS** 會是優先順序復原選項，但當使用者不符合電子郵件訊息復原的資格時，您的使用者集區可能會回到 SMS 訊息。在此案例中，使用者可以將電子郵件 MFA 設定為偏好，而且只有在他們嘗試重設密碼時才會收到簡訊。
+ 如果您只將一個 MFA 方法設為可用，則不需要管理使用者 MFA 偏好設定。
+ 作用中的 SMS 組態會自動讓 SMS 訊息成為使用者集區中可用的 MFA 方法。

  在使用者集區中包含您自己的 Amazon SES 資源的作用中[電子郵件組態](user-pool-email.md)，以及 Essentials 或 Plus 功能計劃，會自動讓電子郵件訊息成為使用者集區中可用的 MFA 方法。
+ 當您在使用者集區中將 MFA 設定為必要時，使用者無法啟用或停用任何 MFA 方法。您只能設定偏好的方法。
+ 當您在使用者集區中將 MFA 設定為選用時，受管登入不會提示使用者設定 MFA，但會在使用者擁有偏好的 MFA 方法時提示他們輸入 MFA 代碼。
+ 當您在全功能模式中啟用[威脅防護](cognito-user-pool-settings-threat-protection.md)並設定適應性驗證回應時，MFA 必須是使用者集區中的選用項目。具有適應性身分驗證的回應選項之一，是針對其登入嘗試評估為包含風險層級的使用者，要求 MFA。

  主控台**的註冊**功能表中**的必要屬性**設定會決定使用者是否必須提供電子郵件地址或電話號碼才能註冊您的應用程式。當使用者具有對應的屬性時，電子郵件和簡訊會變成合格的 MFA 因素。的[結構描述](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)參數會視需要`CreateUserPool`設定屬性。
+ 當您在使用者集區中將 MFA 設定為必要，且使用者使用受管登入登入登入時，Amazon Cognito 會提示他們從使用者集區的可用方法中選取 MFA 方法。受管登入會處理電子郵件地址或電話號碼的集合，以及 TOTP 的設定。下圖示範 Amazon Cognito 提供給使用者的選項背後的邏輯。

### 設定使用者的 MFA 偏好設定
<a name="user-pool-settings-mfa-preferences-configure"></a>

您可以在具有存取金鑰授權的自助式模型中，或在具有管理 API 操作的管理員受管模型中，為使用者設定 MFA 偏好設定。這些操作會啟用或停用 MFA 方法，並將多種方法之一設定為偏好選項。您的使用者設定 MFA 偏好設定後，Amazon Cognito 會在登入時提示他們從偏好的 MFA 方法提供代碼。尚未設定偏好設定的使用者會收到提示，在`SELECT_MFA_TYPE`挑戰中選擇偏好的方法。
+ 在使用者自助式模型或公有應用程式中，使用登入使用者的存取字符授權的 [SetUserMfaPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) 會設定 MFA 組態。
+ 在管理員受管或機密應用程式中，使用管理 AWS 登入資料授權的 [AdminSetUserPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html) 會設定 MFA 組態。

您也可以從 Amazon Cognito 主控台的使用者選單設定**使用者** MFA 偏好設定。如需 Amazon Cognito 使用者集區 API 中公有和機密身分驗證模型的詳細資訊，請參閱 [了解 API、OIDC 和受管登入頁面身分驗證](authentication-flows-public-server-side.md#user-pools-API-operations)。

## 使用者執行時間的 MFA 邏輯詳細資訊
<a name="user-pool-settings-mfa-user-outcomes"></a>

若要判斷使用者登入時要採取的步驟，您的使用者集區會評估使用者 MFA 偏好設定、[使用者屬性](user-pool-settings-attributes.md)、[使用者集區 MFA 設定](#user-pool-configuring-mfa)、[威脅防護](cognito-user-pool-settings-adaptive-authentication.md)動作和[自助式帳戶復原](managing-users-passwords.md#user-pool-password-reset-and-recovery)設定。然後，它會登入使用者、提示他們選擇 MFA 方法、提示他們設定 MFA 方法，或提示他們輸入 MFA。若要設定 MFA 方法，使用者必須提供[電子郵件地址或電話號碼](user-pool-settings-mfa-sms-email-message.md)，或[註冊 TOTP 驗證器](user-pool-settings-mfa-totp.md#totp-mfa-set-up-api)。他們也可以設定 MFA 選項，並[事先註冊偏好的選項](#user-pool-settings-mfa-preferences-configure)。下圖列出使用者集區組態在初次註冊後立即嘗試登入時的詳細效果。

此處說明的邏輯適用於以 SDK 為基礎的應用程式和[受管登入](cognito-user-pools-managed-login.md)，但在受管登入中不可見。當您對 MFA 進行疑難排解時，請從使用者的結果回溯到促成決策的使用者設定檔和使用者集區組態。

![\[最終使用者 MFA 選擇之 Amazon Cognito 使用者集區決策程序的圖表。\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/cup-mfa-decision-tree.png)


下列清單對應至決策邏輯圖中的編號，並詳細說明每個步驟。![\[checkmark\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png) 指出成功的身分驗證和流程的結論。![\[error\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/error.png) 表示身分驗證失敗。

1. 使用者會在您的登入畫面中顯示其使用者名稱或使用者名稱和密碼。如果他們沒有出示有效的登入資料，則會拒絕他們的登入請求。

1. 如果他們成功進行使用者名稱密碼身分驗證，請判斷 MFA 是必要、選用還是關閉。如果關閉，正確的使用者名稱和密碼會導致身分驗證成功。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

   1. 如果 MFA 是選用的，請判斷使用者先前是否已設定 TOTP 驗證器。如果他們已設定 TOTP，則提示 TOTP MFA。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

   1. 判斷威脅防護的適應性身分驗證功能是否需要使用者設定 MFA。如果尚未指派 MFA，則會登入使用者。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

1. 如果需要 MFA 或自適應身分驗證已指派 MFA，請判斷使用者是否已將 MFA 因素設定為已啟用且偏好。如果有，請提示 使用該因素輸入 MFA。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

1. 如果使用者尚未設定 MFA 偏好設定，請判斷使用者是否已註冊 TOTP 驗證器。

   1. 如果使用者已註冊 TOTP 驗證器，請判斷使用者集區中是否提供 TOTP MFA （在使用者先前設定驗證器之後，可以停用 TOTP MFA)。

   1. 判斷使用者集區中是否也提供電子郵件訊息或簡訊 MFA。

   1.  如果電子郵件或簡訊 MFA 都無法使用，請提示使用者輸入 TOTP MFA。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

   1. 如果電子郵件或簡訊 MFA 可用，請判斷使用者是否有對應的 `phone_number` `email`或 屬性。如果是這樣，則任何不是自助式帳戶復原主要方法且已啟用 MFA 的屬性都可以供他們使用。

   1. 向使用者提示包含 TOTP 和可用簡訊或電子郵件 MFA 因素`MFAS_CAN_SELECT`的選項`SELECT_MFA_TYPE`的挑戰。

   1.  提示使用者輸入他們為回應`SELECT_MFA_TYPE`挑戰而選取的因素。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

1. 如果使用者尚未註冊 TOTP 驗證器，或者他們目前有 但 TOTP MFA 已停用，請判斷使用者是否有 `email`或 `phone_number` 屬性。

1.  如果使用者只有電子郵件地址或電話號碼，請判斷該屬性是否也是使用者集區實作來傳送帳戶復原訊息以進行密碼重設的方法。如果為 true，則無法完成需要 MFA 的登入，Amazon Cognito 會傳回錯誤。若要啟用此使用者的登入，您必須新增非復原屬性或為其註冊 TOTP 驗證器。 ![\[alt text not found\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/error.png)

   1. 如果他們有可用的非復原電子郵件地址或電話號碼，請判斷是否已啟用對應的電子郵件或 SMS MFA 因素。

   1. 如果他們有未復原的電子郵件地址屬性，且已啟用電子郵件 MFA，請提示他們提出 `EMAIL_OTP` 挑戰。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

   1. 如果他們有未復原的電話號碼屬性，且已啟用 SMS MFA，請提示他們提出 `SMS_MFA` 挑戰。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

   1. 如果他們沒有符合已啟用電子郵件或 SMS MFA 因素資格的屬性，請判斷是否已啟用 TOTP MFA。如果停用 TOTP MFA，則無法完成需要 MFA 的登入，Amazon Cognito 會傳回錯誤。若要啟用此使用者的登入，您必須新增非復原屬性或為其註冊 TOTP 驗證器。 ![\[alt text not found\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/error.png)
**注意**  
如果使用者具有 TOTP 驗證器但停用 TOTP MFA，則此步驟已評估為**否**。

   1. 如果已啟用 TOTP MFA，請在 `MFAS_CAN_SETUP`選項`SOFTWARE_TOKEN_MFA`中使用 向使用者提出`MFA_SETUP`挑戰。若要完成此挑戰，您必須為使用者分別註冊 TOTP 驗證器，並使用 回應`"ChallengeName": "MFA_SETUP", "ChallengeResponses": {"USERNAME": "[username]", "SESSION": "[Session ID from VerifySoftwareToken]}"`。

   1. 使用者使用來自 [VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html) 請求的工作階段字符回應`MFA_SETUP`挑戰後，提示他們提出`SOFTWARE_TOKEN_MFA`挑戰。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

1. 如果使用者同時有電子郵件地址和電話號碼，請判斷是否有任何屬性是密碼重設的帳戶復原訊息的主要方法。

   1. 如果停用自助式帳戶復原，任一屬性都可以用於 MFA。判斷是否已啟用電子郵件和簡訊 MFA 因素之一或兩者。

   1. 如果兩個屬性都啟用為 MFA 因素，請提示使用者使用`MFAS_CAN_SELECT`選項 `SMS_MFA`和 進行`SELECT_MFA_TYPE`挑戰`EMAIL_OTP`。

   1. 提示他們輸入為了回應`SELECT_MFA_TYPE`挑戰而選取的因素。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

   1. 如果只有一個屬性是合格的 MFA 因素，請提示它們對剩餘的因素提出挑戰。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

      此結果會在下列案例中發生。

      1. 當它們具有 `email` 和 `phone_number` 屬性時，會啟用 SMS 和電子郵件 MFA，主要帳戶復原方法是透過電子郵件或簡訊。

      1. 當它們具有 `email`和 `phone_number` 屬性時，只會啟用 SMS MFA 或電子郵件 MFA，並停用自助式帳戶復原。

1. 如果使用者尚未註冊 TOTP 驗證器，且沒有 `email`或 `phone_number` 屬性，請提示他們提出 `MFA_SETUP` 挑戰。中的清單`MFAS_CAN_SETUP`包含使用者集區中非主要帳戶復原選項的所有已啟用 MFA 因素。他們可以使用 `ChallengeResponses` 來回應電子郵件或 TOTP MFA 的挑戰。若要設定 SMS MFA，請分別新增電話號碼屬性並重新啟動身分驗證。

   對於 TOTP MFA，以 回應`"ChallengeName": "MFA_SETUP", "ChallengeResponses": {"USERNAME": "[username]", "SESSION": "[Session ID from VerifySoftwareToken]"}`。

   對於電子郵件 MFA，請以 回應`"ChallengeName": "MFA_SETUP", "ChallengeResponses": {"USERNAME": "[username]", "email": "[user's email address]"}`。

   1. 提示他們輸入為了回應`SELECT_MFA_TYPE`挑戰而選取的因素。如果他們成功回應 MFA 挑戰，則會登入。 ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/checkmark.png)

## 設定使用者集區以進行多重驗證
<a name="user-pool-configuring-mfa"></a>

您可以在 Amazon Cognito 主控台或使用 [SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html) API 操作和 SDK 方法設定 MFA。

**在 Amazon Cognito 主控台中設定 MFA**

1. 登入 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home)。

1. 選擇 **User Pools** (使用者集區)。

1. 從清單中選擇現有的使用者集區，或[建立使用者集區](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。

1. 選擇**登入**選單。尋找**多重要素驗證**，然後選擇**編輯**。

1. 選擇您想要與使用者集區搭配使用的 **MFA 強制執行**方法。  
![\[Amazon Cognito 主控台的螢幕擷取畫面，其中包含 MFA 選項。\]](http://docs.aws.amazon.com/zh_tw/cognito/latest/developerguide/images/cup-mfa.png)

   1. **Require MFA** (需要 MFA)。您使用者集區中的所有使用者都必須使用額外的簡訊、電子郵件或以時間為基礎的一次性密碼 (TOTP) 程式碼登入，做為額外的身分驗證因素。

   1. **選用 MFA**。您可以提供使用者註冊其他登入因素的選項，但仍允許尚未設定 MFA 的使用者登入。如果您正在使用適應性身分驗證，請選擇此選項。如需有關適應性身分驗證的詳細資訊，請參閱 [具有威脅防護的進階安全性](cognito-user-pool-settings-threat-protection.md)。

   1. **No MFA** (沒有 MFA)。您的使用者無法註冊額外的登入要素。

1. 選擇您應用程式中支援的 **MFA methods** (MFA 方法)。您可以將**電子郵件訊息**、**簡訊**或產生 TOTP 的 **Authenticator 應用程式**設定為第二個因素。

1. 如果使用文字簡訊作為第二個要素，且您尚未設定與 Amazon Simple Notification Service (Amazon SNS) 搭配用於簡訊的 IAM 角色，則您可以在主控台中建立一個角色。在使用者集區的**身分驗證方法**選單中，尋找 **SMS** 並選擇**編輯**。您也可以使用允許 Amazon Cognito 為您將簡訊傳送給使用者的現有角色。如需詳細資訊，請參閱 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

   如果您使用電子郵件訊息做為第二個因素，且您尚未將原始身分設定為搭配 Amazon Simple Email Service (Amazon SES) 用於電子郵件訊息，請在 主控台中建立一個。您必須選擇**使用 SES 傳送電子郵件**選項。在使用者集區的**身分驗證方法**功能表中，找到**電子郵件**，然後選擇**編輯**。從清單中可用的已驗證身分中選取 **FROM 電子郵件地址**。如果您選擇已驗證的網域，例如 `example.com`，您還必須在已驗證的網域中設定 **FROM 寄件者名稱**，例如 `admin-noreply@example.com`。

1. 選擇**儲存變更**。