支持双因素身份验证 (2FA) 几乎总是一个好主意,尤其是对于后台系统。2FA 有许多不同的形式,其中一些包括 SMS、TOTP 甚至硬件令牌。
启用它们需要类似的流程:
- 用户转到他们的个人资料页面(如果您想在注册时强制使用 2fa,请跳过此页面)
- 单击“启用双因素身份验证”
- 输入一些数据以启用特定的 2FA 方法(电话号码、TOTP 验证码等)
- 下次登录时,除了用户名和密码外,登录表单还会请求第二个因素(验证码)并将其与凭据一起发送
我将重点介绍 Google Authenticator,它使用 TOTP(基于时间的一次性密码)来生成一系列验证码。这个想法是服务器和客户端应用程序共享一个密钥。根据该键和当前时间,两者都得出相同的代码。当然,时钟不是完全同步的,所以有一些代码窗口被服务器接受为有效的。请注意,如果您不信任 Google 的应用程序,您可以使用下面的相同库实现您自己的客户端应用程序。
如何使用 Java(在服务器上)实现它?使用GoogleAuth
库。流程如下:
- 用户转到他们的个人资料页面
- 单击“启用双因素身份验证”
- 服务器生成一个密钥,将其存储为用户配置文件的一部分,并将 URL 返回到二维码。请注意,最好对机密进行加密,以使其更难被数据泄露破坏。
- 用户使用他们的 Google Authenticator 应用程序扫描二维码,从而在应用程序中创建一个新的个人资料
- 用户在与二维码一起出现的字段中输入应用显示的验证码,然后点击“确认”
- 服务器在用户配置文件中将 2FA