Cuando usamos una API REST, muchas veces necesitamos proteger el acceso:
👉 Para eso existen dos conceptos clave:
Ejemplo
Cuando entrás a tu cuenta de correo, primero te autenticás con usuario y contraseña. Después, según tu rol, podés estar autorizado a leer tus emails pero no los de otra persona.
Existen varios enfoques. Los más comunes son:
Una API Key es una cadena única que identifica al cliente. Se entrega al usuario cuando se registra en el servicio. Se envía en el header o como parámetro en la URL.
Ejemplo en header
GET /datos HTTP/1.1
Host: api.ejemplo.com
Authorization: ApiKey 12345abcdef
Ejemplo en cURL
curl -H "Authorization: ApiKey 12345abcdef" https://api.ejemplo.com/datos
👉 Son fáciles de usar pero no tan seguras como otros métodos, porque pueden ser robadas si no se transmiten por HTTPS.
Un token es un identificador generado por el servidor al momento de autenticarse (normalmente con usuario + contraseña). El cliente debe incluir este token en cada petición, en el header Authorization
.
GET /usuarios/1 HTTP/1.1
Host: api.ejemplo.com
Authorization: Bearer abcdef123456
👉 El prefijo Bearer significa portador, indicando que quien tenga el token puede acceder. Esquema definido en RFC 6750.
Un JWT (JSON Web Token) es un estándar muy popular para manejar autenticación y autorización en APIs REST.
Características
header.payload.signature
.Ejemplo de JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VyaWQiOjEsInJvbCI6ImFkbWluIn0.
h5tG1zX4V4hKc-tZDfPi7dyW4QaU57aV6lzPt-8L9gk
userId
, rol, expiración).Payload decodificado
{
"userId": 1,
"rol": "admin",
"exp": 1715380000
}
👉 El servidor puede verificar la firma sin necesidad de guardar estado; esto hace a JWT muy eficiente en arquitecturas distribuidas.
/login
.Authorization: Bearer <token>
.Petición de login
POST /login
Content-Type: application/json
{
"email": "ana@ejemplo.com",
"password": "12345"
}
Respuesta con token JWT
{
"token": "eyJhbGciOiJIUzI1NiIsInR..."
}
Uso del token en una petición protegida
GET /pedidos/9001
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR...
👉 Si el token es válido, el servidor devuelve el pedido. Si el token falta o está vencido, responde con 401 Unauthorized.
En muchas APIs, después de autenticar al usuario, se incluyen roles en el token (admin, editor, usuario) para manejar la autorización.
curl -X GET https://api.ejemplo.com/usuarios ^
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR..."
La autenticación asegura que el cliente es quien dice ser; la autorización controla qué acciones puede realizar ese cliente.
Métodos comunes: API Keys, Bearer Tokens, JWT.
Los JWT se han convertido en el estándar de facto en APIs REST por ser seguros, livianos y stateless.
👉 En resumen: sin autenticación y autorización, una API REST estaría expuesta a cualquiera y no sería segura.