Generador de encabezados Basic Auth

Introduce un nombre de usuario y una contraseña para obtener el encabezado Authorization: Basic y un comando curl listo para ejecutar, o pega un encabezado existente para ver las credenciales que contiene.

Encabezado Authorization
Comando curl

Decodificar un encabezado existente

Se ejecuta por completo en tu navegador. No se sube nada.

Cómo se usa

  1. Introduce el nombre de usuario y la contraseña.
  2. Copia el encabezado Authorization generado en tu cliente o usa el comando curl para probar la petición.
  3. Para leer un encabezado existente, pégalo en la sección Decodificar un encabezado existente y verás el nombre de usuario y la contraseña.

Cómo funciona la autenticación HTTP Basic

La autenticación Basic se define en RFC 7617. Cuando un recurso está protegido, el servidor responde con 401 Unauthorized y un encabezado WWW-Authenticate: Basic realm="...". Entonces el cliente une el nombre de usuario y la contraseña con dos puntos, codifica el resultado en Base64 y lo envía con cada petición:

Authorization: Basic base64(username ":" password)

# Ejemplo de RFC 7617: usuario "Aladdin", contraseña "open sesame"
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Los navegadores gestionan este intercambio por su cuenta y muestran un cuadro de inicio de sesión, mientras que los scripts y los clientes de API suelen enviar el encabezado en la primera petición sin esperar al desafío. Como los dos puntos separan ambos valores, el nombre de usuario no puede contenerlos; la contraseña, sí. Un servidor puede añadir charset="UTF-8" a su desafío para indicar que espera en UTF-8 las credenciales con caracteres no ASCII.

Base64 no es cifrado

El encabezado parece ilegible, pero cualquiera que lo vea puede recuperar la contraseña en segundos, con el decodificador de esta página o con cualquier decodificador Base64. La autenticación Basic solo es aceptable con HTTPS, donde TLS cifra el encabezado durante la transmisión. Ten en cuenta también que:

  • las credenciales viajan con cada petición, así que basta una sola petición por HTTP sin cifrar para exponerlas;
  • los proxies, los balanceadores de carga y las herramientas de depuración pueden registrar el encabezado Authorization si no se configuran para evitarlo;
  • los navegadores recuerdan las credenciales introducidas hasta que se cierran, y no existe una forma estándar de cerrar sesión.

Para API públicas, los tokens de API revocables u OAuth son más adecuados. La autenticación Basic sigue siendo una opción razonable para herramientas internas, entornos de preproducción y llamadas entre servidores a través de TLS.

Enviar el encabezado desde código

# curl construye el encabezado por sí mismo
curl -u 'user:password' https://api.example.com/

// fetch de JavaScript (btoa solo admite caracteres Latin-1)
fetch(url, { headers: { Authorization: 'Basic ' + btoa('user:password') } })

# requests de Python
requests.get(url, auth=('user', 'password'))

Evita incluir las credenciales en la URL, como en https://user:password@host/. RFC 3986 desaconseja esa forma, que acaba en el historial del navegador y en los registros del servidor, y los navegadores modernos la restringen.

Preguntas frecuentes

¿Cómo decodifico un encabezado Basic Auth?

Pega el encabezado en la sección Decodificar un encabezado existente y el nombre de usuario y la contraseña aparecerán al instante. Cualquier decodificador Base64 da el mismo resultado, y precisamente por eso el encabezado solo debe viajar por HTTPS.

¿Puede la contraseña contener dos puntos?

Sí. El servidor divide el valor decodificado en el primer signo de dos puntos, así que todo lo que viene después forma parte de la contraseña. El nombre de usuario, en cambio, no puede contener dos puntos.

¿Es segura la autenticación HTTP Basic?

Con HTTPS y una contraseña robusta y única, protege las credenciales durante la transmisión, pero estas se envían con cada petición y no pueden caducar como un token. No la uses nunca sobre HTTP sin cifrar.

¿Por qué falla el inicio de sesión con contraseñas que tienen letras acentuadas o caracteres no latinos?
Puede que el cliente y el servidor no usen la misma codificación de caracteres. RFC 7617 permite que el servidor declare charset="UTF-8"; si no lo hace, los servidores antiguos pueden suponer ISO-8859-1 y comparar bytes distintos.
¿Se envía mi contraseña a algún sitio?

No. El encabezado se genera con JavaScript en tu navegador y no se transmite nada. Aun así, usa credenciales de prueba cuando compartas con otras personas un comando curl generado.