PHP 实现双因素身份认证(2FA)
双因素身份认证,简单理解就是使用账户密码登录后需要使用一个动态码确认,账户密码
加 动态码
两种方式登录,多一步就多一点安全性,
但是,这种方式也牺牲了方便。因此,有多种形式的动态码确认,常见的就有:基于TOTP验证APP,例如Google Authenticator、微软的 Authenticator;网上银行的U盾,这类第三方专属物理设备验证。
TOTP
今天,需要实现的是基于 TOTP (基于时间的一次性密码)实现的两步验证。
需要实现的步骤如下:
- 用户登录后,需要手动启用两步验证,
- 生成专有的恢复码和包含密钥的二维码,
- 用户使用Authenticator扫码后,需要提供Authenticator生成的动态码进行启用,
- 用户重新登录后需要提供动态码才能完成登录操作
代码实现
依赖
生成密钥
use RobThree\Auth\TwoFactorAuth;
$provider = new TwoFactorAuth('你的域名');
$secret_key = $provider->createSecret();
$qr = $provider->getQRCodeImageAsDataUri('用户的名称获取ID', $secret_key);
显示二维码即可,当然要保存 $secret_key
跟用户关联上;
验证动态码
基本原理: 每30秒生成一个动态码
use RobThree\Auth\TwoFactorAuth;
$provider = new TwoFactorAuth('你的域名');
$provider->verifyCode($secret_key, $_POST['code']); // bool
参考
转载请保留原文链接: https://zodream.cn/blog/id/249.html