我已经使用https://github.com/chregu/GoogleAuthenticator.php为我正在工作的web应用程序构建了一个双因素身份验证。一切都能正常工作,生成秘密,甚至代码也能工作。现在,我在不同的服务器上设置了相同的代码,并生成了新的密钥,并将其添加到google authenticator移动应用程序中,现在在移动设备中生成的代码不匹配。
我通过比较两个服务器上的结果来挖掘,注意到time()函数返回不同的时间(1小时差),然后我强制我的第二个服务器(在google代码不起作用的地方)与第一个服务器有相同的时间,它起作用了。所以我真的很困惑,这是不是时区问题?因为我真的需要这些服务器有自己的时区。
附近有什么工作吗?
此外,我关注了https://support.google.com/accounts/answer/185834?hl=en,并同步了我的谷歌身份验证应用程序仍然不能工作。在移动应用程序中生成的代码在一个小时后在我的第二个服务器上工作。有没有人可以帮我或者给我一个不同的建议。
下面是我用来连接到上面的库的代码
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;
}
}发布于 2014-10-28 09:11:55
发现我的服务器时间与互联网时间不同步。在web服务器中同步时间后,该问题得到了解决。因此,只要移动电话和服务器同步到正确的时间(NTP服务器),时区就不会影响验证器。
如果任何人有相同的问题,检查服务器时间和手机时间,确保他们显示正确的时间,即使是一分钟的慢或快都可能最终生成错误的代码。
https://stackoverflow.com/questions/26539649
复制相似问题