Volver a la página principal
miércoles 18 septiembre 2024
38

Cómo implementar autenticación básica en HTTP

La autenticación básica en HTTP es un método sencillo de proteger el acceso a recursos web. Consiste en enviar credenciales (usuario y contraseña) codificadas en Base64 dentro del encabezado de una solicitud HTTP.

¿Cómo funciona la autenticación básica en HTTP?

La autenticación básica en HTTP utiliza el encabezado Authorization para enviar las credenciales. Aunque el sistema es simple, no es seguro por sí solo, ya que la información se transmite sin cifrado. Se recomienda usar autenticación básica solo sobre HTTPS para proteger las credenciales.

1. Solicitud del cliente: Cuando el cliente intenta acceder a un recurso protegido, el servidor responde con el código de estado 401 Unauthorized e incluye el encabezado WWW-Authenticate: Basic realm="nombre_del_recurso".

2. Envío de credenciales: El cliente envía una nueva solicitud, agregando el encabezado Authorization: Basic seguido de las credenciales codificadas en Base64 (formato usuario:contraseña).

3. Respuesta del servidor: Si las credenciales son correctas, el servidor concede acceso al recurso. En caso contrario, devuelve de nuevo el código 401.

Ejemplo en HTTP

A continuación, se muestra un ejemplo básico del uso de autenticación básica en HTTP.

Solicitud inicial del cliente (sin autenticación):

GET /recurso-protegido HTTP/1.1
Host: www.ejemplo.com

Respuesta del servidor:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Acceso restringido"

Solicitud del cliente con credenciales:

GET /recurso-protegido HTTP/1.1
Host: www.ejemplo.com
Authorization: Basic dXN1YXJpbzpjb250cmFzZW5h

Donde dXN1YXJpbzpjb250cmFzZW5h es la codificación en Base64 de usuario:contrasena.

Ejemplos de implementación

Ejemplo en Node.js (con Express):

const express = require('express');
const app = express();

const authMiddleware = (req, res, next) => {
  const authHeader = req.headers['authorization'];
  if (!authHeader) {
    res.setHeader('WWW-Authenticate', 'Basic');
    return res.sendStatus(401);
  }
  const base64Credentials = authHeader.split(' ')[1];
  const credentials = Buffer.from(base64Credentials, 'base64').toString('ascii');
  const [username, password] = credentials.split(':');

  if (username === 'usuario' && password === 'contrasena') {
    next(); // credenciales correctas
  } else {
    res.sendStatus(401); // credenciales incorrectas
  }
};

app.get('/recurso-protegido', authMiddleware, (req, res) => {
  res.send('Acceso concedido');
});

app.listen(3000, () => {
  console.log('Servidor ejecutándose en el puerto 3000');
});

Ejemplo en Apache (configuración de .htaccess):

AuthType Basic
AuthName "Área restringida"
AuthUserFile /ruta/a/.htpasswd
Require valid-user

Este archivo .htaccess exige autenticación básica para acceder a una carpeta protegida. Debes crear un archivo .htpasswd para almacenar los usuarios y contraseñas.

Referencia oficial

Puedes consultar más detalles sobre autenticación básica en la documentación oficial del protocolo HTTP.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer