问题描述
我们正在使用 Amplify、Cognito 和 Angular 来构建登录工作流程。在 TOTP 设置过程中,我们会向用户展示一个二维码。
作为一种良好的做法,我们还希望允许用户手动输入“设置代码”,以防他们无法使用二维码。
我真的找不到关于此的任何具体文档,但似乎有些人建议使用“复制到剪贴板”按钮,该按钮复制 Auth.setupTOTP()
的结果,然后可以将其复制到 Google Authenticator 或 Authy,或者用户用来管理其 MFA 的任何东西。
问题在于:
- 用户通常在台式计算机上设置 TOTP,并使用手机作为两因素身份验证。因此,“复制到剪贴板”技术是无用的。他们必须手动输入代码。
- 代码长度为 52 个字符!没有人会想输入 52 个字符。
有没有办法获得更短的代码,例如最多 16 个字符?
解决方法
不,那是不可能的。身份验证器应用程序需要 base32 编码的种子值,因此无需执行编码魔术来减少字符数。 TOTP 种子必须足够长才能抵抗蛮力。
就用户体验而言,我唯一一次使用手动输入选项是在我的手机上设置 MFA 时,这显然意味着我无法用它拍摄 QR 照片。在这种情况下,复制到剪贴板按钮会很有用,而且还可以让在触摸设备上轻松选择和复制。
您不必适应每一种情况,它是一次性设置。如果有人由于某种原因无法用手机扫描二维码,他们只需要手动输入即可。