如何為 Amazon Cognito 使用者集區啟用 TOTP 多重要素驗證?

2 分的閱讀內容
0

我想為我的應用程式使用者啟用多重要素驗證 (MFA)。如何使用 Amazon Cognito 使用者集區,透過以時間為基礎的一次性密碼 (TOTP) 權杖來執行該操作?

簡短描述

若要為應用程式使用者啟用 TOTP MFA,請為使用者集區設定 TOTP 軟體權杖 MFA

**重要:**在設定 TOTP 權杖之前,請記住以下幾點:

  • 在設定 TOTP 權杖之前,您必須先將 MFA 新增至使用者集區
  • TOTP 權杖只有在使用者嘗試登入應用程式或已經通過驗證後才能與使用者建立關聯。
  • MFA 不支援使用者集區中的聯合身分使用者。

以下是如何使用 AWS Command Line Interface (AWS CLI) 和 Google Authenticator 設定 TOTP MFA 的範例。

解決方法

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確定您使用的是最新版本的 AWS CLI

1.    從 AWS CLI 執行下列 AssociateSoftwareToken 命令,以開始 MFA 權杖產生器設定:

aws cognito-idp associate-software-token --access-token eyJraWQiO........ua5Pq3NaA
{
    "SecretCode":
    "AETQ6XXMDFYMEPFQQ7FD4HKXXXXAOY3MBXIVRBLRXX3SXLSHHWOA"
}

2.    開啟 Google Authenticator 首頁,然後選擇開始使用

3.    選擇輸入設定金鑰

4.    針對帳戶名稱,請輸入帳戶名稱。例如,BobPhone。

**注意:**帳戶名稱可以是任何字串識別符。

5.    對於您的金鑰文字輸入,請複製並貼上從您在步驟一中執行的 AssociateSoftwareToken 命令產生的秘密代碼。

6.    選擇金鑰類型下拉式清單,然後選擇時間型

7.    使用螢幕和下列程式碼中顯示的時間型密碼驗證軟體權杖:

aws cognito-idp verify-software-token --access-token eyJraWQiO........ua5Pq3NaA --user-code 269194 --friendly-device-name BobPhone
{
    "Status": "SUCCESS"
}

8.    使用 AWS CLI 中的下列其中一個命令,將使用者的 MFA 組態設定為 TOTP MFA:

set-user-mfa-preference

此命令允許使用者設定自己的 MFA 組態。

set-user-mfa-preference 命令範例

aws cognito-idp set-user-mfa-preference --software-token-mfa-settings Enabled=true,PreferredMfa=true --access-token eyJraWQiO........ua5Pq3NaA

admin-set-user-mfa-preference

此命令允許管理員設定使用者的 MFA 組態。

admin-set-user-mfa-preference 命令範例

aws cognito-idp admin-set-user-mfa-preference --software-token-mfa-settings Enabled=true,PreferredMfa=true --username Bob --user-pool-id us-east-1_123456789

9.    透過以下其中一種方式驗證使用者來測試您的設定:

Amazon Cognito 託管 UI

AWS CLI 中的 InitiateAuthAdminInitiateAuth API 呼叫。

**注意:**若要使用任一方法驗證使用者,您必須具有使用者的密碼、使用者名稱和軟體 MFA 代碼。

下列範例說明如何使用 AdminInitiateAuth 命令來測試使用者驗證。

admin-initiate-auth 命令範例

aws cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id 3n4b5urk1ft4fl3mg5e62d9ado --auth-flow ADMIN_USER_PASSWORD_AUTH --auth-parameters USERNAME=Bob,PASSWORD=P@ssw0rd

**重要:**確保使用您自己的資訊取代以下變數:user-pool-idclient-idusernamepassword。此外,請確保透過執行以下操作,為使用者集區應用程式用戶端啟用 ALLOW_ADMIN_USER_PASSWORD_AUTH 流程:

1.    開啟 Amazon Cognito 主控台

2.    選擇管理使用者集區

3.    選擇應用程式用戶端,然後選取顯示詳細資訊。

4.    選擇為管理員 API 啟用使用者名稱密碼驗證以進行驗證 (ALLOW_ADMIN_USER_PASSWORD_AUTH)。

5.  選擇儲存應用程式用戶端變更

如需詳細資訊,請參閱管理員驗證流程

admin-initiate-auth 命令的範例輸出

{
    "ChallengeName": "SOFTWARE_TOKEN_MFA",
    "ChallengeParameters": {
        "FRIENDLY_DEVICE_NAME": "BobPhone",
        "USER_ID_FOR_SRP": "Bob"
    },
    "Session": "Xxz6iadwuWJGN4Z7f4ul5p50IHUqITquoaNxxyDvep.......3A6GokZWKeQ6gkFW4Pgv"
}

admin-respond-to-auth-challenge 命令範例

aws cognito-idp admin-respond-to-auth-challenge --user-pool-id us-east-1_123456789 --client-id 3n4b5urk1ft4fl3mg5e62d9ado --challenge-name SOFTWARE_TOKEN_MFA --challenge-responses USERNAME=Bob,SOFTWARE_TOKEN_MFA_CODE=123456 --session  Xxz6iadwuWJGN4Z7f4ul5p50IHUqITquoaNxxyDvep.......3A6GokZWKeQ6gkFW4Pgv

**重要:**確保使用您自己的資訊取代以下變數:client-idusernamesoftware_token_MFA_Code

admin-respond-to-auth-challenge 命令的範例輸出

{
    "AuthenticationResult": {
        "ExpiresIn": 3600,
        "RefreshToken": "eyJjdHkiOiJKV1QiLCJlbmMi.......dlbjrtyizlLzZZ5fjjCgL__AVHEzYycjJs_h3i-ly_KixDNtz9VEC",

        "TokenType": "Bearer",
        "NewDeviceMetadata": {

            "DeviceKey": "us-east-1_28abrd7-10f7-9fc6-a931-3ede1c8ckd75",
            "DeviceGroupKey": "-Gqkj3brS"

        },
        "IdToken": "eyJraWQiOiIzcFFSV29Pb........mNMbE_vvPkQYBuA9ackoER1aSABFGaKK4BpgPjMn7la_A",
        "AccessToken": "eyJraWQiOi...........qwvQq4awt63TyWw"

    },
    "ChallengeParameters": {}
}

AWS 官方
AWS 官方已更新 2 年前