我使用https://github.com/chregu/GoogleAuthenticator.php为我正在处理的Web应用程序构建了2因素身份验证。一切都有效,甚至代码都有效。 现在我在不同的服务器中设置相同的代码并生成新的密钥并将其添加到谷歌身份验证器移动应用程序现在移动中生成的代码不匹配。
我通过比较两个服务器上的结果并注意到time()函数返回不同的时间(1小时差异),然后我强迫我的第二个服务器(谷歌代码没有工作)与第一个服务器有相同的时间,它工作了。所以我真的很困惑这是某种时区问题吗?因为我真的需要这些服务器拥有自己的时区。
有什么工作吗?
我也跟着https://support.google.com/accounts/answer/185834?hl=en并同步了我的google身份验证器应用仍然无法正常工作。移动应用程序中生成的代码在一小时后在我的第二台服务器上运行。任何人都可以帮助我或建议我采用不同的方法。
这是我用来连接上面的库的代码
class googleAuthLibrary extends GoogleAuthenticator
{
public function getSecretKey()
{
$secretKey = $this->generateSecret();
return $secretKey;
}
public function getQRLink($username, $hostname, $secretKey)
{
$url = 'https://chart.googleapis.com/chart?cht=qr&chs=300x300&chl=';
$qrCode = 'otpauth://totp/'.$username.'@'.$hostname.'?secret='.$secretKey;
$url = $url.$qrCode;
return $url;
}
public function getAuthCode($secretKey)
{
$authCode =$this->getCode($secretKey);
return $authCode;
}
}
答案 0 :(得分:13)
发现我的服务器时间未与互联网时间同步。在Web服务器中同步时间后问题得到解决。 只要移动电话和服务器同步到正确的时间(NTP服务器),时区就不会影响验证者。
如果有相同问题的人检查服务器时间和手机时间,请确保他们显示正确的时间,即使一分钟慢或快,最终可能会生成错误的代码。