6

Ho utilizzato https://github.com/chregu/GoogleAuthenticator.php per creare un'autenticazione a 2 fattori per un'applicazione Web su cui sto lavorando. Tutto funziona generando segreto e anche il codice ha funzionato. Ora ho impostato lo stesso codice su un altro server e ho generato una nuova chiave segreta e l'ho aggiunta all'app mobile google authenticator ora il codice generato nel cellulare non corrisponde.Google Authenticator con PHP

Mi sto scavando confrontando i risultati su entrambi i server e ho notato che la funzione time() restituisce un tempo diverso (differenza di 1 ora) quindi ho forzato il mio secondo server (dove non funzionava il codice google) ad avere lo stesso tempo del primo e lavorato. Quindi sono davvero confuso è una sorta di problema del fuso orario? Coz ho davvero bisogno di questi server per avere il proprio fuso orario.

C'è qualche problema?

Inoltre ho seguito https://support.google.com/accounts/answer/185834?hl=en e ho sincronizzato la mia app di autenticazione di Google ancora non funziona. il codice generato nell'app mobile funziona sul mio secondo server dopo un'ora. Qualcuno può aiutarmi o suggerirmi un approccio diverso.

Ecco il codice che sto usando per connettersi alla libreria sopra

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

Dopo un paio di riflessioni serie: sto pensando di salvare più informazioni come il fuso orario degli utenti e poi ottenere il codice facendo manipolare il tempo in base al fuso orario a cui appartengono. C'è qualche altra soluzione migliore? –

risposta

10

Abbiamo scoperto che il mio tempo server non è stato sincronizzato con il tempo internet. Dopo aver sincronizzato il tempo nel server web, il problema è stato risolto. Quindi il fuso orario non ha effetto sull'autenticatore a condizione che sia il telefono cellulare sia il server siano sincronizzati per avere l'ora corretta (server NTP).

Se qualcuno che ha lo stesso problema controlla l'ora del server e l'ora del telefono cellulare, assicurarsi che stiano mostrando il momento giusto anche se un minuto lento o veloce può finire per generare codici errati.