

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

# 管理 AWS SDKs驗證方法
<a name="authentication-flows-selection-sdk"></a>

Amazon Cognito 使用者集區中的使用者可以使用各種初始登入選項或*因素*登入。對於某些因素，使用者可以使用多重要素驗證 (MFA) 進行追蹤。這些首要因素包括使用者名稱和密碼、一次性密碼、通行密鑰和自訂身分驗證。如需詳細資訊，請參閱[身分驗證流程](amazon-cognito-user-pools-authentication-flow-methods.md)。當您的應用程式具有內建 UI 元件並匯入 AWS SDK 模組時，您必須建置應用程式邏輯以進行身分驗證。您必須從兩種主要方法中選擇一種，並從該方法中選擇您要實作的身分驗證機制。

您可以實作以*用戶端為基礎的身分驗證*，其中您的應用程式或用戶端會事先宣告身分驗證的類型。您的另一個選項是*選擇型身分驗證*，您的應用程式會收集使用者名稱，並請求使用者可用的身分驗證類型。您可以根據您的需求，在相同的應用程式中一起實作這些模型，或在應用程式用戶端之間分割。每個方法都有其獨有的功能，例如以用戶端為基礎的自訂身分驗證和以選擇為基礎的無密碼身分驗證。

在使用使用者集區 API 的 AWS SDK 實作執行身分驗證的自訂應用程式中，您必須建構 API 請求，以符合使用者集區組態、應用程式用戶端組態和用戶端偏好設定。以 `AuthFlow`的 開頭的`InitiateAuth`工作階段會`USER_AUTH`開始以選擇為基礎的身分驗證。Amazon Cognito 會以偏好的身分驗證方法或選項清單的挑戰來回應您的 API。以 開頭`AuthFlow`的工作階段`CUSTOM_AUTH`會直接使用 Lambda 觸發程序進行自訂身分驗證。

有些身分驗證方法固定為兩種流程類型的其中之一，而有些方法在這兩種流程中都可用。

**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. 請求使用 `AuthParameters`的偏好挑戰`PREFERRED_CHALLENGE`，以及偏好挑戰的參數，如果有的話。例如，如果您請求 `PREFERRED_CHALLENGE`的 `PASSWORD_SRP`，您也必須包含 `SRP_A`。如果您的使用者、使用者集區和應用程式用戶端都已針對偏好的挑戰設定，Amazon Cognito 會回應該挑戰的下一個步驟，例如`PASSWORD_VERIFIER`在 `PASSWORD_SRP`流程或 `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`流程。選取您要新增至使用者選項**的其他選項**。您可以新增 的 **Passkey**`WEB_AUTHN`、 **的電子郵件訊息一次性密碼**`EMAIL_OTP`，以及 的**簡訊一次性密碼**`SMS_OTP`。

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

------
#### [ 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` 請求會宣告直接對應至其中一個所列選項`AuthFlow`的登入，例如 `USER_SRP_AUTH`。透過此宣告，請求也包含開始身分驗證的參數，例如 `USERNAME`、 `SECRET_HASH`和 `SRP_A`。Amazon Cognito 可能會針對 `PASSWORD_VERIFIER` SRP 或 TOTP MFA `SOFTWARE_TOKEN_MFA`的密碼登入等其他挑戰追蹤此請求。

若要[設定應用程式用戶端](authentication.md#authentication-implement)進行用戶端型身分驗證，`ALLOW_USER_AUTH`請將 以外的任何身分驗證流程新增至允許的身分驗證流程。範例為 `ALLOW_USER_PASSWORD_AUTH`、`ALLOW_CUSTOM_AUTH`、`ALLOW_REFRESH_TOKEN_AUTH`。若要允許以用戶端為基礎的身分驗證流程，不需要額外的使用者集區組態。