Lección 11 de 20 · Lectura y práctica
Configurar autenticación con tokens JWT en gRPC
Concepto claveLa autenticación con JWT (JSON Web Tokens) en gRPC es un mecanismo para verificar la identidad de clientes que se comunican con tus microservicios. Imagina que cada servicio es un edificio de oficinas seguro: el JWT.
Del concepto a la práctica
Taller de esta lección
La autenticación JWT en gRPC comienza en los metadatos, pero la decisión no termina al comprobar que existe un token. Hay que validar firma, expiración y sujeto antes de permitir el método solicitado; la autorización puede requerir además un rol.
Ejemplo resuelto
claims ilustrados: sub=ana, rol=operadora, exp=1767263400
hora de prueba fija: 2026-01-01T10:20:00Z
exp corresponde a 2026-01-01T10:30:00Z
método: Inventario.Consultar
resultado: autenticada; autorización depende de la política del métodoEl servidor no confía en el nombre enviado en el cuerpo si contradice el sujeto validado.
exp es NumericDate en segundos desde epoch, no un texto horario. Emite tres tokens firmados de laboratorio con iss y aud esperados, sub y exp; valida firma con algoritmo permitido y clave de confianza, y comprueba esos claims mediante la biblioteca JWT. La expiración debe comprobarse respecto al reloj real salvo en un test con reloj controlado: estos tokens fechados son fixtures, no credenciales utilizables ahora. Envía authorization: Bearer TOKEN sobre TLS fuera del loopback y nunca copies el token a logs.
Pruébalo
Crea tokens de laboratorio válidos, expirados y con firma inválida.
Colócalos en metadatos de tres llamadas locales.
Registra solo resultado, sujeto seguro y método.
Error frecuente: aceptar cualquier cadena después de Bearer. Corrección: verifica algoritmo permitido, firma, expiración y claims requeridos.
Comprueba tu resultado
Ejercicio: usa los tres tokens sobre un método protegido. Resultado esperado: solo el válido supera autenticación; los otros reciben UNAUTHENTICATED y nunca llegan a la lógica de negocio.

Mapa de prácticaEl control de acceso, las actualizaciones y las copias de seguridad cubren riesgos distintos. Una alerta necesita un procedimiento de respuesta para contener y recuperar el servicio. Varias capas reducen la exposición, pero ninguna garantiza seguridad absoluta.
Ver la infografía en tamaño completo ↗Concepto clave
La autenticación con JWT (JSON Web Tokens) en gRPC es un mecanismo para verificar la identidad de clientes que se comunican con tus microservicios. Imagina que cada servicio es un edificio de oficinas seguro: el JWT es como una credencial temporal que los visitantes (clientes) deben presentar en la entrada (interceptor) antes de poder acceder a las salas (métodos RPC).
Los JWT son tokens compactos y autónomos que contienen tres partes separadas por puntos: un header (que especifica el algoritmo de firma), un payload (con claims como usuario, roles y expiración), y una firma (que valida la integridad). A diferencia de las sesiones tradicionales, no requieren almacenamiento en el servidor, lo que los hace ideales para arquitecturas distribuidas donde los servicios pueden escalar independientemente.
En producción, los JWT suelen tener una vida útil corta (ej., 15 minutos) para minimizar riesgos si son comprometidos, y se combinan con refresh tokens para renovación segura.
Cómo funciona en la práctica
Para implementar autenticación JWT en gRPC, sigues un flujo estandarizado que involucra tanto el cliente como el servidor. Aquí está el proceso paso a paso:
- Generación del token: Un servicio de autenticación (como Auth Service) emite un JWT cuando un usuario inicia sesión, firmándolo con una clave secreta o privada.
- Inserción en metadata: El cliente incluye el JWT en los metadatos de la solicitud gRPC, típicamente en el header
authorizationcon el prefijoBearer. - Intercepción en el servidor: Un interceptor en el servidor gRPC captura los metadatos, extrae el token, y lo valida (verificando firma, expiración y claims).
- Autorización: Basado en claims como roles, el servidor decide si permitir o denegar la llamada al método RPC.
- Respuesta: Si es válido, la solicitud procede; si no, se devuelve un error
UNAUTHENTICATEDo similar.
Ejemplo de metadata en Go:
md := metadata.Pairs("authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")Caso de estudio
Considera un sistema de microservicios para un e-commerce con servicios de Pedidos, Inventario y Pagos. Implementamos autenticación JWT para asegurar que solo usuarios autenticados puedan realizar acciones críticas.
| Servicio | Método gRPC | Claim requerido | Acción |
|---|---|---|---|
| Pedidos | CreateOrder | user_id, role:customer | Crear nuevo pedido |
| Inventario | UpdateStock | role:admin | Modificar niveles de stock |
| Pagos | ProcessPayment | user_id, role:customer | Procesar pago seguro |
Flujo: Un usuario inicia sesión en el Auth Service, recibe un JWT, y lo usa para llamar a CreateOrder. El interceptor en el servicio Pedidos valida el token y verifica que el claim role sea customer. Si es admin, podría también acceder a UpdateStock. Esto previene accesos no autorizados y centraliza la lógica de autenticación.
Errores comunes
- No validar la firma del JWT: Aceptar tokens sin verificar la firma permite a atacantes modificar claims. Siempre usa claves seguras y algoritmos como HS256 o RS256.
- Ignorar la expiración (exp claim): Tokens expirados deben ser rechazados inmediatamente. Configura validación automática en librerías como
jwt-goen Go ojsonwebtokenen Node.js. - Exponer secretos en código Almacenar claves de firma en repositorios públicos. Usa variables de entorno o servicios como AWS Secrets Manager.
- Falta de manejo de errores en interceptores: No proporcionar mensajes claros cuando la autenticación falla, dificultando el debugging. Devuelve errores gRPC estándar como
UNAUTHENTICATEDcon detalles. - No usar HTTPS en producción: Transmitir JWT sobre HTTP los expone a sniffing. Siempre habilita TLS/SSL en tus canales gRPC.
Checklist de dominio
- ¿Puedes generar un JWT válido con claims personalizados usando una librería estándar en tu lenguaje?
- ¿Implementaste un interceptor de servidor gRPC que extrae y valida tokens JWT de los metadatos?
- ¿Configuraste la inclusión automática de JWT en metadatos desde el cliente gRPC?
- ¿Manejas errores de autenticación devolviendo códigos de estado gRPC apropiados?
- ¿Probaste flujos con tokens expirados, inválidos o sin token para verificar robustez?
- ¿Aseguraste que las claves de firma estén protegidas y rotadas periódicamente?
- ¿Documentaste los claims requeridos para cada método RPC en tu API?
Implementa un interceptor de autenticación JWT en un servicio gRPC existente
En este ejercicio, agregarás autenticación JWT a un servicio gRPC simple que gestiona usuarios. Sigue estos pasos:
- Prepara el entorno: Clona un repositorio base (ej., en Go o Node.js) que tenga un servicio gRPC con métodos como
GetUseryUpdateUser. Asegúrate de tener instaladas las dependencias necesarias, como librerías JWT. - Genera tokens de prueba: Crea un script que genere dos JWT: uno válido con claim
role:adminy expiración en 1 hora, y otro expirado. Usa una clave secretamy_secret_keyy algoritmo HS256. - Implementa el interceptor de servidor: En el servidor gRPC, escribe un interceptor que:
- Extraiga el token del header
authorizationen los metadatos. - Valide la firma, expiración, y verifique que el claim
roleseaadminpara métodos sensibles comoUpdateUser. - Devuelva error
UNAUTHENTICATEDsi el token es inválido o falta, oPERMISSION_DENIEDsi el rol es incorrecto.
- Extraiga el token del header
- Modifica el cliente: Actualiza el cliente para incluir el token válido en los metadatos al llamar a
UpdateUser. Prueba con el token expirado y observa los errores. - Prueba y verifica: Ejecuta el servidor y cliente, confirmando que:
- Las llamadas con token válido funcionan.
- Las llamadas sin token o con token inválido fallan con errores claros.
- El claim de rol se aplica correctamente (ej., un token con
role:userno puede acceder aUpdateUser).
Pistas
- Usa la librería estándar de JWT para tu lenguaje (ej., github.com/golang-jwt/jwt para Go) para simplificar la validación.
- En los metadatos gRPC, el header debe estar en minúsculas: 'authorization'.
- Para métodos que no requieren autenticación (ej., salud), puedes omitir el interceptor o manejarlo condicionalmente.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con Implementación Avanzada de gRPC y Protocol Buffers para Microservicios
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.