跳至內容

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

2 分的閱讀內容
0

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

簡短描述

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

重要: 在設定 TOTP 權杖之前,請檢閱以下需求:

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

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

解決方法

注意: 如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

  1. 若要啟動 MFA 權杖產生器設定,請執行下列 associate-software-token AWS CLI 命令:

    aws cognito-idp associate-software-token --access-token eyJraWQiO........ua5Pq3NaA
    {
        "SecretCode":
        "AETQ6XXMDFYMEPFQQ7FD4HKXXXXAOY3MBXIVRBLRXX3SXLSHHWOA"
    }
  2. 開啟 Google Authenticator 首頁,然後選擇 Get started (開始使用)。

  3. 選擇 Enter a setup key (輸入設定金鑰)。

  4. 請在 Account name (帳戶名稱),輸入帳戶名稱。
    注意: 帳戶名稱可以是任何字串識別碼。

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

  6. 選擇 Type of key (金鑰類型),然後選取 Time based (時間型)。

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

    aws cognito-idp verify-software-token --access-token eyJraWQiO........ua5Pq3NaA --user-code 269194 --friendly-device-name ExampleName
    {
        "Status": "SUCCESS"
    }
  8. 若要將使用者的 MFA 組態設定為 TOTP MFA,請執行 set-user-mfa-preferenceadmin-set-user-mfa-preference AWS CLI 命令:
    set-user-mfa-preference 命令範例

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

    注意: 此命令可讓使用者設定自己的 MFA 組態。
    admin-set-user-mfa-preference 命令範例

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

    注意: 此命令可讓管理員設定使用者的 MFA 組態。

  9. 若要為使用者集區應用程式用戶端啟動 ALLOW_ADMIN_USER_PASSWORD_AUTH 流程,請開啟 Amazon Cognito 主控台

  10. 選擇 Manage User Pools (管理使用者集區)。

  11. 選擇應用程式用戶端,然後選取 Show details (顯示詳細資訊)。

  12. 選擇 Enable username password auth for admin APIs for authentication (ALLOW_ADMIN_USER_PASSWORD_AUTH) (為管理員 API 啟用使用者名稱密碼驗證以進行驗證 (ALLOW_ADMIN_USER_PASSWORD_AUTH))。

  13. 選擇 Save app client changes (儲存應用程式用戶端變更)。

  14. 若要測試您的設定,請使用下列其中一種方法驗證使用者:
    Amazon Cognito 託管 UI
    AWS CLI 中的 InitiateAuthAdminInitiateAuthRespondToAuthChallenge API 呼叫。
    注意: 若要使用任一方法驗證使用者,您必須具有使用者的密碼、使用者名稱和軟體 MFA 代碼。
    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=ExampleName,PASSWORD=P@ssw0rd

注意: 使用您的資訊取代以下變數:user-pool-idclient-idusernamepassword

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

{    
    "ChallengeName": "SOFTWARE_TOKEN_MFA",
    "ChallengeParameters": {
        "FRIENDLY_DEVICE_NAME": "ExampleDevice",
        "USER_ID_FOR_SRP": "ExampleName"
    },
    "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=ExampleName,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": {}
}

相關資訊

使用 Amazon Cognito 使用者集區進行驗證