Autenticação

Autenticação

Sistema completo de autenticação com suporte a 2FA, RBAC, brute-force, remember-me e LGPD.

Auth

use Blumiga\auth\Auth;

$auth = new Auth([
    'password_algo' => PASSWORD_ARGON2ID,
    'session_fingerprint' => true,
    'session_expiry' => 120, // minutos
    'remember_lifetime' => 30, // dias
    'brute_force_max' => 5,
    'brute_force_window' => 300,
    'min_password_length' => 8,
    'require_mixed_case' => true,
    'require_numbers' => true,
    'require_symbols' => true,
]);

// Registrar
$auth->register(['email' => 'user@email.com', 'password' => 'Str0ng!Pass']);
$auth->sendSecurityHeaders();

Login

if ($auth->login(['email' => $email, 'password' => $pass], true)) {
    // Autenticado! (true = remember-me)
}

// Verificar
if ($auth->check()) {
    $user = $auth->user();
    $userId = $auth->id();
}

// Logout
$auth->logout();

TOTP (2FA)

$secret = $auth->totp()->generateSecret();
$qrCode = $auth->totp()->getQRCode('user@email.com', $secret);

// Validar
if ($auth->totp()->verify($userInput, $secret)) {
    $auth->totp()->enable($userId, $secret);
}

RBAC

// Constantes pré-definidas
RBAC::ALL_GROUPS;     // 5 grupos
RBAC::ALL_PERMISSIONS; // 7 permissões

// Verificar
$rbac = new RBAC($userId);
if ($rbac->hasPermission('admin.access')) {
    // Acesso permitido
}

Password Reset

$reset = new PasswordReset();
$reset->sendResetLink('user@email.com');
$reset->resetPassword($token, 'Nova@Senha123');

Magic Link

$magic = new MagicLink();
$magic->send('user@email.com', '/dashboard');
// Usuário clica no link e é autenticado automaticamente

LGPD

// Consentimento
$consent = new Consentimento();
$consent->registrarConsentimento($userId, 'marketing', true);

// Exportar dados
$export = new Exportador();
$dados = $export->exportarUsuario($userId);

// Mascarar dados
$mask = new Mascaramento();
$mask->mascararEmail('user@email.com'); // u***@e***.com

Segurança

// Headers de segurança automáticos
$auth->sendSecurityHeaders();
$auth->contentSecurityPolicy("default-src 'self'");

// Honeypot para bots
$honeypot = new Honeypot();
$honeypot->render(); // Campo oculto
if ($honeypot->wasHoneypotTriggered()) {
    // Provável bot
}