MENU

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证

February 26, 2025 • PHP

使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。

下载谷歌验证类库文件放到项目合适位置(我这边放在项目app/helpers目录下)

如果你不想使用composer安装,可以直接下载后解压,将PHPGangsta/GoogleAuthenticator.php文件放到你自己项目的公共类库中。比如我是放在了项目的app/helpers/GoogleAuthenticator.php中。在控制器中直接 new GoogleAuthenticator就可以了。

生成密钥二维码

//引入谷歌验证器类
use app\helpers\GoogleAuthenticator;
$ga = new \PHPGangsta_GoogleAuthenticator();

//这是生成的密钥,每个用户唯一一个,为用户保存起来用于验证
$secret = $ga->createSecret();
//dump($secret);

//下面为生成二维码,内容是一个URI地址(otpauth://totp/账号?secret=密钥&issuer=标题)
$qrCodeUrl = $ga->getQRCodeGoogleUrl('lepig', $secret, 'Google');
//dump($qrCodeUrl);
return '<img src="'.$qrCodeUrl.'">';

注意:由于时间问题,getQRCodeGoogleUrl()方法中,请检查最后return的第三方二维码生成接口地址是否失效。

如果不放心使用第三方,可以使用php的qrcode第三方工具库来自己生成,以确保稳定性。

PHP第三方qrcode工具库推荐 endroid/qr-codechillerlan/php-qrcode

将上面生成的二维码地址放入网页img标签里面即可,示例图展示如下

google_authenor.png

验证校验码

接下来就是客户端谷歌验证APP扫码绑定后进行输码验证,验证PHP代码示例:

//引入谷歌验证器类
use app\helpers\GoogleAuthenticator;
$ga = new \PHPGangsta_GoogleAuthenticator();

//下面为验证参数
$code = $_GET['code'];//客户提交上来的谷歌验证APP里面对应的验证码

//该用户绑定谷歌验证生成的唯一秘钥,项目里从数据库获取
$secret = 'PD2KPX7V4EYMEXWF';

//验证用户提交的验证码是否正确
$checkResult = $ga->verifyCode($secret, $code, 1); 

if ($checkResult) {
    echo '验证成功';
} else {
    echo '验证失败';
}

验证成功即客户绑定谷歌验证成功。该谷歌验证可用于客户登陆支付个人设置等各种场景。