Google Authenticator для вашего сайта

Здраствуйте! Сегодня я хочу показать как можно подключить Google Authenticator к входу, на своем сайте.
На хабрахабре я нашел только одну статью, но автор просто вырезал куски кода из примера. А сам код работает, только если полностью скопировать пример, и все его файлы. Поэтому мне пришлось разбираться самому.

Для начала скачиваем API с GitHubа (Два файла в папке lib). (Автор chregu) Распаковываем, и подключаем его в ваш файл входа и регистрации через:

<?php
require_once("GoogleAuthenticator.php");
?>

Дальше нам необходимо создать для каждого пользователя свой ключ. Эту функцию необходимо добавить в файл регистрации в тот момент где регистрация завершена.

<?php
$g = new GoogleAuthenticator(); //Подключаемся к библиотеке
$secret = $g-&gt;generateSecret(); //Генерируем ключ
?>

Добавляем $secret в базу данных к новому пользователю

Теперь когда каждому пользователю выдается ключ, нам нужно сделать так, чтобы он смог его загрузить в Google Authenticator на телефоне. Проще всего это сделать с помощью вывода qr кода, но увы генератор от Google уже не работает, поэтому дадим пользователю инструкцию, как это сделать вручную:

<?php
$g = new GoogleAuthenticator();
$address = $username."@".$_SERVER['HTTP_HOST']; //$username = Логин который указывал человек при регистрации. Получаем адрес пользователя.
?>

После выводим сообщение:

<h2>Здраствуйте <?php echo $username;?>!</h2>
Для того чтобы пользоваться сайтом, вам необходимо установить приложение Google Authenticator на свой телефон.

После, выберете пункт настроить вручную. Введите следующее:
Логин: <?php echo $address; ?>
Ключ: <?php echo $secret; ?>

Итак, пользователь уже подключился и видит как код меняется, но что ему с ним делать?
Собственно нужно создать проверку на правильный код при входе:

<?php
$g=new GoogleAuthenticator; //Подключаем модуль уже к страничке входа
$gkey= ""; //Любым методом получаете ключ, пользователя. Например: После входа пользователя по паре логина и пароля, достать из базы данных его ключ
$authcode = $g->getCode($gkey); //Получаем текущий код авторизации. Он будет таким как в приложении Google Authenticator.
if ($authcode==$_POST['code']) { //Сверяем текущий ключ, с ключом который ввел пользователь.
    $_SESSION['username']=$username; //Открываем новую сессию с логином пользователя.
    header("Location: account.php"); //Направляем пользователя в его профиль
}
else{
    echo "Неправильный код Google Authenticator.";
}
?>

Вот и все. Теперь безопасность на вашем сайте возрастет!
Желаю удачи!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *