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.
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.
A continuación, se muestra un ejemplo básico del uso de autenticación básica en HTTP.
GET /recurso-protegido HTTP/1.1
Host: www.ejemplo.com
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Acceso restringido"
GET /recurso-protegido HTTP/1.1
Host: www.ejemplo.com
Authorization: Basic dXN1YXJpbzpjb250cmFzZW5h
Donde dXN1YXJpbzpjb250cmFzZW5h
es la codificación en Base64 de usuario:contrasena
.
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');
});
.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.
Puedes consultar más detalles sobre autenticación básica en la documentación oficial del protocolo HTTP.
Jorge García
Fullstack developer