Google Authenticator с использованием PHP

Я использовал 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;
    }
}

person Abhishek Salian    schedule 24.10.2014    source источник
comment
После нескольких серьезных размышлений :) я думаю о сохранении дополнительной информации, такой как часовой пояс пользователей, а затем получить код, манипулируя временем в зависимости от часового пояса, которому они принадлежат. Есть ли другое лучшее решение?   -  person Abhishek Salian    schedule 24.10.2014


Ответы (1)


Обнаружил, что время моего сервера не синхронизировано со временем в Интернете. После синхронизации времени на веб-сервере проблема была решена. Таким образом, часовой пояс не влияет на аутентификатор, если и мобильный телефон, и сервер синхронизированы, чтобы иметь правильное время (серверы NTP).

Если у кого-то возникла такая же проблема, проверьте время сервера и время мобильного телефона, убедитесь, что они показывают правильное время, даже если минута медленнее или быстрее, это может привести к генерации неправильных кодов.

person Abhishek Salian    schedule 28.10.2014
comment
это означает, что сервер из США и человек из Индии должны быть в одном часовом поясе? это практически невозможно сделать. у клиента может быть другой часовой пояс, чем то, как можно запустить код? - person Ashu Kumar; 05.11.2019
comment
Нет - это противоположно тому, что говорится: часовой пояс не влияет на аутентификатор. Вместо этого проблема возникает, если ваши часы сбились, как это иногда бывает с компьютерными часами (точно так же, как и с аналоговыми часами). Если это произойдет, все может работать неправильно, поэтому вам следует использовать сервер времени для синхронизации часов. - person HappyDog; 10.03.2021