я использовал https://github.com/chregu/GoogleAuthenticator.php построить двухфакторную аутентификацию для веб-приложения, над которым я работаю. Все работает, генерируя секрет, и даже код работал.
Теперь я установил тот же код на другом сервере, сгенерировал новый секретный ключ и добавил его в мобильное приложение google authenticator. Теперь код, созданный на мобильном устройстве, не совпадает.
Я покопался, сравнив результаты на обоих серверах, и заметил, что функция time () возвращает разное время (разница в 1 час), после чего я заставил свой второй сервер (где не работал код Google) иметь то же время, что и первый, и это сработало. Так что я действительно запутался, это какая-то проблема с часовым поясом? Потому что мне действительно нужны эти серверы, чтобы иметь свой собственный часовой пояс.
Есть ли работа вокруг?
Тоже следил 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;
}
}
Обнаружил, что время моего сервера не синхронизировано со временем в интернете. После синхронизации времени на веб-сервере проблема была решена.
Таким образом, часовой пояс не влияет на аутентификатор, если для синхронизации мобильного телефона и сервера установлено правильное время (NTP-серверы).
Если кто-то сталкивается с такой же проблемой, проверьте время на сервере и время на мобильном телефоне, убедитесь, что они показывают правильное время, даже если минута медленная или быстрая, может привести к тому, что будут генерироваться неправильные коды.
Других решений пока нет …