PHP 实现双因素身份认证(2FA)

Fork Me On Github
zodream 编程技术 PHP 02月27日

PHP 实现双因素身份认证(2FA)

双因素身份认证,简单理解就是使用账户密码登录后需要使用一个动态码确认,账户密码动态码 两种方式登录,多一步就多一点安全性,

但是,这种方式也牺牲了方便。因此,有多种形式的动态码确认,常见的就有:基于TOTP验证APP,例如Google Authenticator、微软的 Authenticator;网上银行的U盾,这类第三方专属物理设备验证。

TOTP

今天,需要实现的是基于 TOTP (基于时间的一次性密码)实现的两步验证。

需要实现的步骤如下:

  1. 用户登录后,需要手动启用两步验证,
  2. 生成专有的恢复码和包含密钥的二维码,
  3. 用户使用Authenticator扫码后,需要提供Authenticator生成的动态码进行启用,
  4. 用户重新登录后需要提供动态码才能完成登录操作

代码实现

依赖

TwoFactorAuth

 
composer require robthree/twofactorauth
1

生成密钥

PHP
         

use RobThree\Auth\TwoFactorAuth;

$provider = new TwoFactorAuth('你的域名');

$secret_key = $provider->createSecret();

$qr = $provider->getQRCodeImageAsDataUri('用户的名称获取ID', $secret_key);
123456789

显示二维码即可,当然要保存 $secret_key 跟用户关联上;

验证动态码

基本原理: 每30秒生成一个动态码

   
TC = floor(unixtime(now) / 30)

TOTP = HASH(SecretKey, TC)
123
php
     
use RobThree\Auth\TwoFactorAuth;

$provider = new TwoFactorAuth('你的域名');

$provider->verifyCode($secret_key, $_POST['code']); // bool
12345

第一步开启2fa

登录强制要求动态码

参考

TwoFactorAuth

点击查看全文
0 201 0