Florian.
Premium
- Inscription
- 8 Août 2012
- Messages
- 4 251
- Réactions
- 1 220
- Points
- 14 353
-
Réponse de Florian. Informatique et nouvelles technologies Développement : Apprenez à utiliser Google Authenticator avec PHP !
- #1
Hello,
Après avoir lu plusieurs doc sur Google Authenticator, j'ai enfin réussi a l'installer xD, pour vous évitez de le faire je vous partage tout ici
Donc let's go, c'est assez simple,
Premièrement, la page ou la personne devra allez avec le pti code barre ( Nom de la page google_auth.php)
Donc voici ma page
J'explique:
Je stock dans la session, le token généré, pour pas qu'il y a de problème ou autre, deuxièmement, j'affiche l'image généré, modifier $website et $title.
Après c'est tout simple, on vérifie seulement si le token existe, ça renvoie True/false logique, une fois ceci fait, on enregistre la key dans la BDD important pour la suite.
Suivant, la page de connexion avec google Authenticator,
La on affiche pas le code barre x) juste on lui demmande le token, si c'est good ben let's go il peux y allez
Attention, j'ai galéré plusieurs heure car tout simplement, le time() avais un retard de 11Minutes donc j'ai du faire un time()+660 ...
Car tout simplement pour vérifier un code il font floor(time() / 30);
En vrai y'a rien de complexe petit plus:
Sur cette ligne $checkResult = $authenticator->verifyCode($_SESSION['Google_auth'], $_POST['code'], '0');
Si vous mettez par exemple 2 ( a la place de 0 ) tout simplement il pourra rentré les deux dernier code donc qui date d'une minute, pas recommander, c'est 1 par défaut
Si vous avez des problèmes/questions n'hésitez pas
Lien de l'archive =>
Après avoir lu plusieurs doc sur Google Authenticator, j'ai enfin réussi a l'installer xD, pour vous évitez de le faire je vous partage tout ici
Donc let's go, c'est assez simple,
Premièrement, la page ou la personne devra allez avec le pti code barre ( Nom de la page google_auth.php)
Donc voici ma page
PHP:
<?php
require_once('./config/db.php');
require_once('./functions/functions_site.php');
require_once('./vendor/autoload.php');
$authenticator = new PHPGangsta_GoogleAuthenticator();
if(!isconnect()){ header('Location: ./connexion.php'); die();}
if(doubleauth()) {header('Location: ./connexion.php'); die();}
function __doubleauth(){
global $authenticator;
$google_key = $authenticator->createSecret();
if(empty($_SESSION['Google_auth'])) { $_SESSION['Google_auth'] = $google_key; }
$website = 'Panel du site XXXX';
$title= 'Code pour le panel '. $_SESSION['username'];
$qrCodeUrl = $authenticator->getQRCodeGoogleUrl($title, $_SESSION['Google_auth'], $website);
return "<br ><img src='$qrCodeUrl' />";
}
function _doubleauth(){
global $bdd;
global $authenticator;
if(!$_POST['code']){ return setFlash('Veuillez remplir tous le champ.');}
$checkResult = $authenticator->verifyCode($_SESSION['Google_auth'], $_POST['code'], '0');
if(!$checkResult){ return setFlash('Le code est mauvais !');}
$req = $bdd->prepare('UPDATE Membres set key_google = ? WHERE id = ?');
$req->execute(array($_SESSION['Google_auth'], $_SESSION['id']));
return setFlash('La double Authenfication est activé !');
header('location: ./');
die();
}
if(isset($_POST['doubleauth'])){ _doubleauth();}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Google Authenticator</title>
</head>
<body>
<?= flash() ?>
<form action="" method="POST">
<input type="text" name="code" placeholder="code">
<?= __doubleauth() ?>
<br><br><input type="submit" name="doubleauth" value="Verifier votre compte">
</form>
</body>
</html>
J'explique:
Je stock dans la session, le token généré, pour pas qu'il y a de problème ou autre, deuxièmement, j'affiche l'image généré, modifier $website et $title.
Après c'est tout simple, on vérifie seulement si le token existe, ça renvoie True/false logique, une fois ceci fait, on enregistre la key dans la BDD important pour la suite.
Suivant, la page de connexion avec google Authenticator,
PHP:
<?php
require_once('./config/db.php');
require_once('./functions/functions_site.php');
require 'vendor/autoload.php';
if(isconnect()){ header('Location: ./'); die();}
if(empty($_SESSION['id'])){ header('location: ./'); die(); }
$authenticator = new PHPGangsta_GoogleAuthenticator();
function connexion(){
global $bdd;
global $authenticator;
if(!$_POST['code']){ return setFlash('Veuillez rempir tous le champ.');}
$get = $bdd->prepare("SELECT * FROM Membres WHERE id = ?");
$get->execute(array($_SESSION['id']));
$fetch = $get->fetch();
$checkResult = $authenticator->verifyCode($fetch['key_google'], $_POST['code'], '0');
if(!$checkResult){ return setFlash('Le code est mauvais !');}
$_SESSION['id'] = $fetch['id'];
$_SESSION['username'] = $fetch['name'];
$_SESSION['email'] = $fetch['email'];
$_SESSION['google_authenticator'] = time();
$_SESSION['token_csrf'] = random(30);
setFlash('Connexion réussie !', 'success');
header('Location: ./');
die();
}
if(isset($_POST['connexiongoogle'])){ connexion();}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Google Authenticator</title>
</head>
<body>
<?= flash() ?>
<form action="" method="POST">
<input type="text" name="code" placeholder="code">
<br><br><input type="submit" name="connexiongoogle" value="Connexion en deux etapes">
</form>
</body>
</html>
La on affiche pas le code barre x) juste on lui demmande le token, si c'est good ben let's go il peux y allez
Attention, j'ai galéré plusieurs heure car tout simplement, le time() avais un retard de 11Minutes donc j'ai du faire un time()+660 ...
Car tout simplement pour vérifier un code il font floor(time() / 30);
En vrai y'a rien de complexe petit plus:
Sur cette ligne $checkResult = $authenticator->verifyCode($_SESSION['Google_auth'], $_POST['code'], '0');
Si vous mettez par exemple 2 ( a la place de 0 ) tout simplement il pourra rentré les deux dernier code donc qui date d'une minute, pas recommander, c'est 1 par défaut
Si vous avez des problèmes/questions n'hésitez pas
Lien de l'archive =>
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.