Es un encabezado HTTP que se usa para la autenticación de APIs, donde el cliente envía un token de acceso (el "portador") en la solicitud para demostrar que tiene permiso para acceder a un recurso protegido, sin necesidad de enviar credenciales (como usuario/contraseña) en cada petición, funcionando como un pase que permite el acceso a quien lo posee.
En resumen es el mecanismo estándar para enviar un token de acceso en una petición HTTP a una API protegida.
- Forma general del header:
Authorization: Bearer <token>
- El <token> suele ser emitido por un Proveedor de Identidad (IdP) vía OAuth 2.0 (y frecuentemente es un JWT).
- El servidor (API) valida el token para saber quién eres y qué permisos tienes.
La Authorization: Bearer <token> normalmente son de uso típico en aplicaciones SPA, móviles, backend-to-backend, microservicios con gateways, entre otros.
Estándar: Bearer Token Usage (OAuth 2.0) está especificado en RFC 6750; los JSON Web Tokens (JWT) están en RFC 7519.
¿Por qué “Bearer”?
“Bearer” significa literalmente el quien porta el token (el “bearer”) está autorizado. No hay clave secreta adicional en la petición: si alguien roba el token, puede usarlo (por eso es crítico protegerlo y limitar su vigencia).Diferencia con otros esquemas
- Basic: Authorization: Basic <base64(user:pass)> (se transmite usuario/contraseña codificada; menos seguro y no escalable).
- Bearer: Authorization: Bearer <access_token> (token emitido por un IdP; ideal para OAuth 2.0 y OpenID Connect).
Ejemplos en diferentes entornos
1) curlcurl -H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Accept: application/json" \
https://api.ejemplo.com/v1/recursos
2) JavaScript (Fetch en navegador/Node)
const token = "<ACCESS_TOKEN>";
const res = await fetch("https://api.ejemplo.com/v1/recursos", {
headers: {
"Authorization": `Bearer ${token}`,
"Accept": "application/json"
}
});
const data = await res.json();
console.log(data);
3) Python (requests)
import requests
token = "<ACCESS_TOKEN>"
headers = {
"Authorization": f"Bearer {token}",
"Accept": "application/json"
}
resp = requests.get("https://api.ejemplo.com/v1/recursos", headers=headers)
print(resp.status_code, resp.json())
4) .NET (C# HttpClient)
using System.Net.Http.Headers;
var client = new HttpClient();
client.BaseAddress = new Uri("https://api.ejemplo.com/");
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "<ACCESS_TOKEN>");
var resp = await client.GetAsync("v1/recursos");
var body = await resp.Content.ReadAsStringAsync();
Console.WriteLine(body);
5) Postman
- En Authorization: Type = Bearer Token → pega el <ACCESS_TOKEN>.
- Postman añadirá Authorization: Bearer ... automáticamente.
6) NGINX (proxy) reenviando a backend
location /api/ {
proxy_pass http://backend;
proxy_set_header Authorization $http_authorization; # reenviar el header
}
Buenas prácticas de seguridad
- Usar HTTPS siempre, y evita la fuga de tokens.
- Corto tiempo de vida del access token (minutos).
- Usa Refresh Tokens con rotación segura para sesiones largas.
- Scopes/roles mínimos necesarios (principio de menor privilegio).
- Validar firma (RS256/ES256) y claims: iss, aud, exp, nbf.
- No guardar tokens en localStorage si puedes evitarlo; prefiere cookies seguras (HttpOnly, Secure, SameSite) para SPAs si tu arquitectura lo permite.
- Revocación y listas de bloqueos si el IdP lo soporta.
- Protege el lado servidor contra replay en endpoints sensibles (nonce, jti, etc.).
0 Comentarios