Ir para conteúdo

POWERED BY:

biakelly

Ajuda com autenticação de 2 fatores 2FA

Recommended Posts

Meninos, preciso de uma ajudinha.

 

criei meu sistema de autenticação baseado no Google Autenticator, ele funciona bem, mas tenho um problema:

Quando um novo usuário se cadastra ele informa nome, e-mail, usuario e senha, na próxima tela é exibido o QRcode para que ele possa ler e obter a sequencia de 6 digitos a ser requerida no próximo passo. As informações de nome, e-mail, senha, usuario e código de recuperação do autenticator são salvas em banco de dados (utilizo Mysql), quando o usuário se loga é solicitado a autenticação para logar, até ai tudo ótimo.

 

O problema: tenho uma base de dados com 100 alunos já cadastrados e sem o 2FA habilitado. Preciso de uma ajuda para criar obrigatoriedade deste usuário obter o QRcode, o sistema precisa entender que o campo "google-code" da tabela esta vazio e precisa apresentar um QRcode para o usuario ler e gravar na base de dados para que ele possa realizar o acesso ao sistema

 

Para gravar o usuário novo no cadastro faço assim:

registro.php

<?php
// Start Session
session_start();

// Database connection
require __DIR__ . '/config/db_connection.php';
$db = DB();

// Application library ( with DemoLib class )
require __DIR__ . '/library/library.php';
$app = new DemoLib($db);

require_once __DIR__ . '/GoogleAuthenticator/GoogleAuthenticator.php';
$pga = new PHPGangsta_GoogleAuthenticator();
$secret = $pga->createSecret();

$register_error_message = '';

// check Register request
if (!empty($_POST['btnRegister'])) {
    if ($_POST['nome'] == "") {
        $register_error_message = 'NOme é obrigatório!';
    } else if ($_POST['email'] == "") {
        $register_error_message = 'E-mail é obrigatório!';
    } else if ($_POST['usuario'] == "") {
        $register_error_message = 'Senha é obrigatória!';
    } else if ($_POST['senha'] == "") {
        $register_error_message = 'Senha é obrigatória!';
    } else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $register_error_message = 'E-mail inválido';
    } else if ($app->isEmail($_POST['email'])) {
        $register_error_message = 'Este e-mail esta sendo utilizado!';
    } else if ($app->isUsername($_POST['username'])) {
        $register_error_message = 'usuário esta sendo utilizado!';
    } else {
        $user_id = $app->Register($_POST['nome'], $_POST['email'], $_POST['usuario'], $_POST['senha'], $secret);
        // set session and redirect user to the profile page
        $_SESSION['user_id'] = $user_id;
        header("Location: confirm_google_auth.php");
    }
}
?>

 

Para logar o usuário estou fazendo assim:

login.php

 

<?php
// Start Session
session_start();

// Database connection
require __DIR__ . '/config/db_connection.php';
$db = DB();

// Application library ( with DemoLib class )
require __DIR__ . '/library/library.php';
$app = new DemoLib($db);

$login_error_message = '';

// check Login request
if (!empty($_POST['btnLogin'])) {

    $usuario = trim($_POST['usuario']);
    $senha = trim($_POST['senha']);

    if ($username == "") {
        $login_error_message = 'O campo Usuário é obrigatório!';
    } else if ($senha == "") {
        $login_error_message = 'O campo Senha é obrigatório!';
    } else {
        $user_id = $app->Login($usuario, $senha);
        if($user_id > 0)
        {
            $_SESSION['user_id'] = $user_id; // Set Session
            header("Location: validar.php"); 
        }
        else
        {
            $login_error_message = 'Campos inválidos!';
        }
    }
}
?>




<form action="index.php" method="post">
                <div class="form-group">
                    <label for="">Usuário / E-mail</label>
                    <input type="text" name="usuario" class="form-control"/>
                </div>
                <div class="form-group">
                    <label for="">Senha</label>
                    <input type="senha" name="senha" class="form-control"/>
                </div>
                <div class="form-group">
                    <input type="submit" name="btnLogin" class="btn btn-primary" value="Acessar"/>
                </div>
            </form>

 

validar.php

<?php
// Start Session
session_start();

// Database connection
require __DIR__ . '/config/db_connection.php';
$db = DB();

// Application library ( with DemoLib class )
require __DIR__ . '/library/library.php';
$app = new DemoLib($db);
$user = $app->UserDetails($_SESSION['user_id']);

require_once __DIR__ . '/GoogleAuthenticator/GoogleAuthenticator.php';
$pga = new PHPGangsta_GoogleAuthenticator();

$error_message = '';

if (isset($_POST['btnValidate'])) {

    $code = $_POST['code'];

    if ($code == "") {
        $error_message = 'Por favor digite um código válido';
    }
    else
    {
        if($pga->verifyCode($user->google-code, $code, 2))
        {
            // success
            header("Location: profile.php");
        }
        else
        {
            // fail
            $error_message = 'Código de autenticação inálido!';
        }
    }
}
?>





			<form method="post" action="login.php">
                <?php
                if ($error_message != "") {
                    echo '<div class="alert alert-danger"><strong>Erro: </strong> ' . $error_message . '</div>';
                }
                ?>
                <div class="form-group">
                    <input type="text" name="code" placeholder="Digite o código de autenticação (2FA)" class="form-control">
                </div>
                <div class="form-group">
                    <button type="submit" name="btnValidate" class="btn btn-primary">Validar</button>
                </div>
            </form>

 

 

 

Me ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.