web-dev-qa-db-ja.com

PHP)を使用するGoogle認証システム

https://github.com/chregu/GoogleAuthenticator.php を使用して、作業中のWebアプリケーションの2要素認証を構築しました。すべてが機能して秘密を生成し、コードも機能しました。別のサーバーに同じコードを設定し、新しい秘密鍵を生成してGoogle認証システムモバイルアプリに追加しました。モバイルで生成されたコードが一致しません。

両方のサーバーで結果を比較して調べたところ、time()関数が異なる時間(1時間の差)を返すことに気付きました。次に、2番目のサーバー(Googleコードが機能しなかった)に最初のサーバーと同じ時間を強制し、機能しました。だから私は本当に混乱していますこれはある種のタイムゾーンの問題ですか? Coz私は本当にこれらのサーバーが独自のタイムゾーンを持つ必要があります。

回避策はありますか?

また、私は https://support.google.com/accounts/answer/185834?hl=en をフォローしましたが、同期したGoogle認証システムアプリはまだ機能しません。モバイルアプリで生成されたコードは、1時間後に2番目のサーバーで機能します。誰かが私を助けたり、私に別のアプローチを提案したりできますか?.

上記のライブラリに接続するために使用しているコードは次のとおりです

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;
    }
}
9
Abhishek Salian

サーバーの時刻がインターネットの時刻と同期されていないことがわかりました。 Webサーバーで時刻を同期した後、問題は解決しました。したがって、携帯電話とサーバーの両方が正しい時刻になるように同期している限り、タイムゾーンはオーセンティケーターに影響しません(NTPサーバー)。

同じ問題を抱えている人がサーバー時間と携帯電話時間をチェックする場合は、1分遅くても速くても正しい時間を表示していることを確認すると、間違ったコードが生成される可能性があります。

14
Abhishek Salian