TIPOS DE AUTENTICACIÓN EN PHP: MÉTODOS Y DIFERENCIAS
Guía práctica de los principales tipos de autenticación que se usan en PHP:Autenticación HTTP Básica (Basic Auth)
El navegador muestra un popup para usuario/contraseña. Se usa mucho con .htaccess, Apache, o directamente en PHP.if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Mi Área Restringida"');
header('HTTP/1.0 401 Unauthorized');
die('Acceso denegado');
}
$usuario = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
- Ventajas: Muy simple.
- Desventajas: Credenciales viajan en cada petición, aunque con HTTPS es aceptable.
Autenticación con Formulario y Sesiones
Esta es la autenticación más usada siendo el método de autenticación clásico y más recomendado para aplicaciones web tradicionales.// login.php
if ($_POST) {
$user = loginUser($_POST['email'], $_POST['password']); // verifica con password_verify()
if ($user) {
session_start();
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
header('Location: dashboard.php');
}
}
- Buenas prácticas: Usar password_hash() y password_verify()
- Regenerar ID de sesión: session_regenerate_id(true)
- CSRF Token
- HTTPS obligatorio
Token-Based Authentication (JWT - JSON Web Tokens)
Muy popular en APIs REST y aplicaciones SPA (React, Vue, etc.).// Ejemplo con firebase/php-jwt
$payload = [
'id' => $user['id'],
'email' => $user['email'],
'exp' => time() + 3600 // 1 hora
];
$jwt = JWT::encode($payload, $secretKey, 'HS256');
- Ventajas: Stateless, escalable
- Desventajas: No se puede invalidar fácilmente (salvo blacklist)
Autenticación del Servidor Web (REMOTE_USER)
- Apache + .htpasswd
- Nginx + auth_basic
- LDAP, Kerberos, SSO corporativo
OAuth 2.0 y OpenID Connect
Se usa para iniciar sesión con Google, Facebook, Microsoft, GitHub, etc.Librerías recomendadas:- league/oauth2-client
- Laravel Socialite, si se usa Laravel en el proyecto
Otros tipos de autenticación importantes
Recomendaciones
- No usar nunca MD5 o SHA1 para contraseñas.
- Usar siempre "password_hash()" y "password_verify()".
- Implementar autenticación multifactor cuando sea posible.
- Usar prepared statements o PDO para evitar SQL Injection.
- Implementar rate limiting en login.