TOTP軟件令牌 MFA - Amazon Cognito

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

TOTP軟件令牌 MFA

當您在使用者集區MFA中設定TOTP軟體權杖時,您的使用者會使用使用者名稱和密碼登入,然後使TOTP用完成驗證。在您的使用者設定並驗證使用者名稱和密碼之後,他們就可以啟用的TOTP軟體 Token。MFA如果您的應用程式使用 Amazon Cognito 託管的 UI 登入使用者,則您的使用者會提交其使用者名稱和密碼,然後在其他登入頁面上提交TOTP密碼。

您可以在 Amazon Cognito 主控台中TOTPMFA為您的使用者集區啟用,也可以使用 Amazon Cognito API 操作。在使用者集區層級,您可以呼叫SetUserPoolMfaConfig以設定MFA和啟用TOTPMFA。

注意

如果您尚未啟用使用者集區MFA的TOTP軟體權杖,Amazon Cognito 就無法使用該權杖建立關聯或驗證使用者。在此情況下,使用者會收到 SoftwareTokenMFANotFoundException 例外狀況和 Software Token MFA has not been enabled by the userPool 描述。如果您稍後停用使MFA用者集區的軟體 Token,先前關聯並驗證TOTP權杖的使用者可以繼續將其用於MFA。

TOTP為您的使用者設定是一個多步驟的程序,您的使用者會收到密碼,以便透過輸入一次性密碼來驗證密碼。接下來,您可以TOTPMFA為您的用戶啟用或設置TOTP為用戶的首選MFA方法。

當您將使用者集區設定為需要,TOTPMFA且使用者在託管的 UI 中註冊您的應用程式時,Amazon Cognito 會自動執行使用者程序。Amazon Cognito 會提示您的使用者選擇一MFA種方法、顯示 QR 碼以設定其驗證器應用程式,並驗證其註冊。MFA在您允許使用者選擇SMS和之間的使用者集區中 TOTPMFA,Amazon Cognito 也會為您的使用者提供一種方法選擇。如需託管 UI 註冊體驗的詳細資訊,請參閱 如何在 Amazon Cognito 託管 UI 中註冊新帳戶

重要

如果您有與使用者集區ACL相關聯的 AWS WAF Web,並且 Web 中的規則ACL顯示時CAPTCHA,這可能會導致託管 UI TOTP 註冊中無法復原的錯誤。若要建立具有CAPTCHA動作且不會影響託管 UI 的規則TOTP,請參閱ACL為託管 UI 配置您的 AWS WAF Web TOTP MFA。如需有關 AWS WAF 網路ACLs和 Amazon Cognito 的詳細資訊,請參閱將 AWS WAF Web ACL 與使用者集區建立關聯

若要TOTPMFA在使用 Amazon Cognito 的自訂使用者介面中實作API,請參閱MFA為 Amazon Cognito 使用者集區中的使用者進行設定 API

若要新增MFA至您的使用者集區,請參閱新增MFA至使用者集區

TOTPMFA考量和限制

  1. Amazon Cognito MFA 透過可產生TOTP代碼的驗證器應用程式支援軟體權杖。Amazon Cognito 不支持基於硬件MFA的。

  2. 當您的用戶池TOTP需要尚未配置它的用戶時,您的用戶會收到一次性訪問令牌,您的應用可用TOTPMFA於激活該用戶。後續的登入嘗試會失敗,直到您的使用者註冊其他TOTP登入因素為止。

    • 使用該SignUpAPI操作或通過託管 UI 在您的用戶池中註冊的用戶在用戶完成註冊時會收到一次性令牌。

    • 在建立使用者且該使用者設定其初始密碼之後,Amazon Cognito 會從託管的使用者界面將一次性權杖發放給使用者。如果您為使用者設定了永久性密碼,Amazon Cognito 會在使用者首次登入時發放一次性權杖。

    • Amazon Cognito 不會向登入或操作的管理員建立的使用者核發一次性權杖。InitiateAuthAdminInitiateAuthAPI在您的使用者成功設定初始密碼的挑戰後,或者如果您為使用者設定永久密碼,Amazon Cognito 會立即挑戰使用者進行設定。MFA

  3. 如果使用者集區中需要的使用者MFA已收到一次性存取權杖,但尚未設定 TOTPMFA,則在設定完成之前,使用者無法使用託管 UI 登入MFA。您可以AdminInitiateAuthAssociateSoftwareToken請求中使用來自MFA_SETUP挑戰的session響應值,而不InitiateAuth是訪問令牌。

  4. 如果您的使用者已設定TOTP,即使您稍後停用使用者集區MFA,他們也可以將其用TOTP於。

  5. Amazon Cognito 僅接TOTPs受使用 HMAC-SHA1 雜湊函數產生代碼的驗證器應用程式。使用 SHA -256 雜湊產生的程式碼會傳回錯誤。Code mismatch

MFA為 Amazon Cognito 使用者集區中的使用者進行設定 API

當用戶首次登錄時,您的應用程序使用其一次性訪問令牌生成TOTP私鑰,並以文本或 QR 碼格式將其顯示給您的用戶。您的使用者會設定其驗證器應用程式,並提供後續登入嘗試使TOTP用。您的應用程式或託管的使用者介面會TOTP在MFA挑戰回應中向 Amazon Cognito 呈現。

關聯TOTP軟體權杖

要關聯TOTP令牌,請向您的用戶發送一個必須使用一次性密碼驗證的密碼。關聯權杖需要三個步驟。

  1. 當您的用戶選擇TOTP軟件令牌時MFA,請調用AssociateSoftwareToken以返回用戶帳戶生成的唯一共享密鑰代碼。您可以使 AssociateSoftwareToken 用訪問令牌或會話字符串進行授權。

  2. 您的應用程式向使用者顯示私有金鑰或是從私有金鑰產生的 QR 代碼。您的用戶必須將密鑰輸入TOTP生成的應用程序,例如 Google 身份驗證器。您可以使用 libqrencode 產生 QR 碼。

  3. 您的使用者輸入金鑰,或將 QR 代碼掃描至驗證器應用程式 (如 Google Authenticator) 中,然後該應用程式開始產生代碼。

驗證令TOTP牌

接下來,驗證TOTP令牌。向您的使用者請求範例代碼,並將其提供給 Amazon Cognito 服務,以確認使用者是否已成功產生TOTP代碼,如下所示。

  1. 您的應用程式會提示使用者輸入代碼,以證明其已正確設定驗證器應用程式。

  2. 使用者的驗證器應用程式會顯示一個臨時密碼。驗證器應用程式的密碼以您給予使用者的私密金鑰為基礎。

  3. 您的使用者輸入其臨時密碼。您的應用程式會在VerifySoftwareTokenAPI請求中將臨時密碼傳遞給 Amazon Cognito。

  4. Amazon Cognito 保留了與使用者相關聯的密鑰,並產生並將其與您的使用者提供的密鑰進行比較。TOTP如果兩者相符,VerifySoftwareToken 會傳回 SUCCESS 回應。

  5. Amazon Cognito 將該TOTP因素與用戶相關聯。

  6. 如果 VerifySoftwareToken 操作傳回 ERROR 回應,請確定使用者的時鐘是正確的,而且沒有超過最大重試次數。Amazon Cognito 接受嘗試前後 30 秒內的TOTP權杖,以解決次要時脈偏差的問題。解決問題後,請再次嘗試此 VerifySoftwareToken 作業。

以下列方式登入 TOTP MFA

此時,您的使用者會使用以時間為基礎的一次性密碼登入。程序如下。

  1. 您的使用者要輸入其使用者名稱和密碼來登入您的用戶端應用程式。

  2. 系統會呼叫TOTPMFA挑戰,而您的應用程式會提示您的使用者輸入臨時密碼。

  3. 您的用戶從關聯TOTP生成的應用程序獲取臨時密碼。

  4. 您的用戶將TOTP代碼輸入到客戶端應用程序中。您的應用程式通知 Amazon Cognito 服務加以驗證。對於每個登錄,RespondToAuthChallenge應調用以獲得對新TOTP身份驗證挑戰的響應。

  5. 如果權杖經過 Amazon Cognito 驗證,則登入成功,使用者可以繼續進行身分驗證流程。

移除權TOTP杖

最後,您的應用程序應該允許您的用戶停用其TOTP配置。您目前無法刪除使用者的TOTP軟體權杖。若要取代使用者的軟體權杖,請關聯並驗證新的軟體權杖。若要停TOTPMFA用使用者,請撥SetUserMFAPreference打電話修改您的使用者以使用 noMFA,或僅使用SMSMFA。

  1. 在您的應用程序中為想要重置的用戶創建一個界面MFA。在此介面中提示使用者輸入其密碼。

  2. 如果 Amazon Cognito 傳回TOTPMFA挑戰,請使用更新您的使用者MFA偏好設SetUserMFAPreference定。

  3. 在您的應用程序中,與您的用戶溝通他們已停用,MFA並提示他們再次登錄。

ACL為託管 UI 配置您的 AWS WAF Web TOTP MFA

如果您有與使用者集區ACL相關聯的 AWS WAF Web,並且 Web 中的規則ACL顯示時CAPTCHA,這可能會導致託管 UI TOTP 註冊中無法復原的錯誤。 AWS WAF CAPTCHA規則只會TOTPMFA以這種方式在託管 UI 中影響。SMSMFA不受影響。

當您的CAPTCHA規則無法讓使用者完成TOTPMFA設定時,Amazon Cognito 會顯示下列錯誤訊息。

由於WAF驗證碼,請求不允許。

當 AWS WAF 提示回應您的使用者集區CAPTCHA在背景中提出的VerifySoftwareTokenAPI要求時,就會產生此錯誤。AssociateSoftwareToken若要建立具有CAPTCHA動作且不會影響託管 UI 的規則TOTP,請在規則中排除該CAPTCHA動作的x-amzn-cognito-operation-name標頭值AssociateSoftwareTokenVerifySoftwareToken標頭值。

下列螢幕擷取畫面顯示的範例 AWS WAF 規則會將CAPTCHA動作套用至所有沒有AssociateSoftwareTokenx-amzn-cognito-operation-name標頭值的要求VerifySoftwareToken

AWS WAF 規則的螢幕擷取畫面,可將CAPTCHA動作套用至所有x-amzn-cognito-operation-name標頭值為AssociateSoftwareToken或的要求VerifySoftwareToken。

如需有關 AWS WAF 網路ACLs和 Amazon Cognito 的詳細資訊,請參閱將 AWS WAF Web ACL 與使用者集區建立關聯