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
PHP recibe el usuario en "$_SERVER['REMOTE_USER']"

OAuth 2.0 y OpenID Connect

Se usa para iniciar sesión con Google, Facebook, Microsoft, GitHub, etc.Librerías recomendadas:

Otros tipos de autenticación importantes

Tipo Uso Recomendado Dificultad Seguridad
Basic Auth APIs internas, admin simple Baja Media
Form + Sessions Sitios web tradicionales Media Alta
JWT APIs, Mobile, Microservicios Media Alta
OAuth2 / OIDC Login con redes sociales / SSO Alta Muy Alta
API Keys Integraciones máquina a máquina Baja Media-Alta
Digest Auth Cuando no quieres HTTPS Media Alta
Passkeys / WebAuthn Autenticación sin contraseña (futuro) Alta Muy Alta

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.