如何使用PHP创建Google两个因素身份验证



我想在我的PHP项目中使用Google 2FA。登录时,用户需要输入6位2FA代码。

您可以为采取哪个方向提取一些技巧?

步骤1)创建一个长度16个字符的唯一秘密代码。phpgangsta为Google Authenticator提供包装类。您可以使用作曲家下载。

curl -sS https://getcomposer.org/installer | php
php composer.phar require  phpgangsta/googleauthenticator:dev-master
Use the below code to generate the secret code.
<?php
require 'vendor/autoload.php';
$authenticator = new PHPGangsta_GoogleAuthenticator();
$secret = $authenticator->createSecret();
echo "Secret: ".$secret;
 
?>
 

步骤2)用生成的秘密创建QR码。

我们需要使用秘密准备QR码。如果您想了解有关Google Authenticator的QR代码生成的更多信息。Github Wiki您可以使用任何QR码生成器来生成QR代码,对于此演示,我正在使用Google图表。

require 'vendor/autoload.php';
$authenticator = new PHPGangsta_GoogleAuthenticator();
$secret = $authenticator->createSecret();
echo "Secret: ".$secret."n";  //save this at server side
 
$website = 'http://hayageek.com'; //Your Website
$title= 'Hayageek';
$qrCodeUrl = $authenticator->getQRCodeGoogleUrl($title, $secret,$website);
echo $qrCodeUrl;

步骤3)使用Google Authenticator应用程序生成TOTP(基于时间的一次性密码)

从Google Play或AppStore下载Google Authenticator应用

打开应用程序并单击" "按钮,然后扫描使用Google图表生成的QR码。Authenticator应用程序为您的网站生成TOTP。TOTP每30秒就会更改。

使用Google Authenticator

的两个因素身份验证

步骤4)在服务器端验证OTP

require 'vendor/autoload.php';
$authenticator = new PHPGangsta_GoogleAuthenticator();
 
$secret = '3JMZE4ASZRIISJRI'; //This is used to generate QR code
$otp = '183036' ;//Generated by Authenticator.
 
$tolerance = 0;
    //Every otp is valid for 30 sec.
    // If somebody provides OTP at 29th sec, by the time it reaches the server OTP is expired.
    //So we can give tolerance =1, it will check current  & previous OTP.
    // tolerance =2, verifies current and last two OTPS
 
$checkResult = $authenticator->verifyCode($secret, $otp, $tolerance);    
 
if ($checkResult) 
{
    echo 'OTP is Validated Succesfully';
     
} else {
    echo 'FAILED';
}
   source code refer this link : http://hayageek.com/two-factor-authentication-with-google-authenticator-php/

您使用哪个软件包非常重要,因为您对控制该包的人非常信任。我宁愿不使用一个叫做phpgangsta的人,而是选择一个。

update

我在下面留下我的原始答案,但是奏鸣曲解决方案的问题在于它查询api.qrserver.com。他们在这里有这些文档。他们提供这项服务非常好,但我不认识他们,所以我不信任他们。

我已经使用了这个解决方案,该解决方案受到phpgangsta的启发,似乎也是一个改进。通常,这似乎是一个更值得信赖的解决方案。我这样用它:

首先使用作曲家添加它:

composer require robthree/twofactorauth

然后您可以打印出QR图像:

$tfa = new TwoFactorAuth(env('APP_NAME'));
$secret = $tfa->createSecret();
$qrCodeImage = $tfa->getQRCodeImageAsDataUri($user->email, $secret);
echo '<img src='.$qrCodeImage.' />';

然后验证:

$tfa = new TwoFactorAuth();
$result = $tfa->verifyCode($secret, $code);
if (empty($result)) print 'Sorry!';
else print 'Yes!';

以下是我的旧答案,但我不建议使用此解决方案

使用Composer:

添加它
composer require sonata-project/google-authenticator

生成一个新代码:

$g = new GoogleAuthenticatorGoogleAuthenticator();
$salt = '7WAO342QFANY6IKBF7L7SWEUU79WL3VMT920VB5NQMW';
$secret = $username.$salt;
echo '<img src="'.$g->getURL($username, 'example.com', $secret).'" />';

然后对其进行验证:

$g = new GoogleAuthenticatorGoogleAuthenticator();
$salt = '7WAO342QFANY6IKBF7L7SWEUU79WL3VMT920VB5NQMW';
$secret = $username.$salt;
$check_this_code = $_POST['code'];
if ($g->checkCode($secret, $check_this_code)) {
  echo 'Success!';
} else {
  echo 'Invalid login';
}

相关内容

  • 没有找到相关文章

最新更新