Tema 15

15. Autenticación y autorización en APIs: scopes, claims, JWT e introspección

Las APIs son uno de los lugares donde identidad y acceso dejan de ser una abstracción y se convierten en decisiones concretas de seguridad. Una API necesita reconocer quién o qué la invoca, validar si el token presentado es confiable, interpretar el alcance concedido y decidir si una operación específica está permitida. En ese recorrido aparecen conceptos como scopes, claims, JWT, tokens opacos e introspección.

Objetivo Entender cómo se protege una API con tokens y decisiones de acceso reales
Enfoque Arquitectura práctica y validaciones esenciales
Resultado Distinguir autenticación técnica, scopes y autorización de negocio

15.1 Introducción

En una aplicación web tradicional, gran parte del control de acceso puede estar concentrado en el servidor y en la sesión del usuario. En una arquitectura basada en APIs, en cambio, el acceso suele estar mediado por tokens emitidos por un sistema externo o por un componente especializado. Eso hace que la API deba tomar decisiones de seguridad a partir de información transportada en cada solicitud.

El problema no se reduce a aceptar o rechazar un token. La API debe responder varias preguntas: quién invoca, con qué identidad, bajo qué emisor, para qué audiencia, con qué alcance y si la operación concreta solicitada está permitida en el contexto del recurso afectado.

Este tema muestra cómo se relacionan esos elementos y por qué tener un token válido no significa automáticamente tener autorización suficiente.

15.2 Por qué las APIs necesitan un enfoque específico

Las APIs suelen ser consumidas por aplicaciones web, móviles, integraciones backend, procesos automatizados y servicios internos. No todos esos consumidores representan directamente a un usuario humano, y no todos usan el mismo tipo de credencial. Por eso el diseño de autenticación y autorización en APIs necesita distinguir claramente entre identidad del cliente, identidad del usuario y permisos efectivos sobre recursos.

Además, una API no puede confiar en supuestos del frontend. Si una interfaz muestra u oculta botones, eso no reemplaza la obligación del backend de verificar cada operación. En seguridad de APIs, la decisión final vive en el servidor que protege el recurso.

15.3 Autenticar al cliente, autenticar al usuario y autorizar la operación

En este contexto conviene separar tres preguntas:

  • Quién es el cliente: qué aplicación o servicio está llamando a la API.
  • Quién es el usuario: en caso de existir, bajo qué identidad humana se realiza la operación.
  • Qué está permitido: si esa llamada concreta puede leer, modificar o eliminar un recurso determinado.

Una integración máquina a máquina puede tener cliente autenticado sin usuario final. Una aplicación delegada puede actuar en nombre de un usuario. Y en ambos casos sigue siendo necesario decidir si la acción pedida está autorizada. Mezclar estas capas lleva a controles incompletos o demasiado permisivos.

15.4 Qué son los scopes

Un scope representa un alcance concedido al token. Suele expresar, de forma relativamente gruesa, para qué conjunto de acciones o recursos puede usarse ese token. Por ejemplo, un token podría incluir scopes de lectura, de escritura o de acceso a cierto dominio funcional.

Los scopes son útiles porque permiten limitar el poder de un token sin entregar acceso global. También ayudan a estructurar consentimiento, delegación y separación entre aplicaciones consumidoras.

Sin embargo, un scope no reemplaza toda la lógica de autorización. Decir que un token tiene alcance para “leer pedidos” no necesariamente significa que pueda leer cualquier pedido del sistema.

15.5 Qué son los claims

Los claims son declaraciones sobre una identidad, un contexto o un token. Pueden describir al usuario, al cliente, al emisor, la audiencia, el tiempo de vigencia o atributos adicionales relevantes para una decisión.

En la práctica, los claims sirven para transportar contexto verificable entre el emisor del token y la API que lo consume. Pero es importante entender su semántica: no todo claim debe ser usado como permiso, ni toda información presente en un token tiene el mismo nivel de confianza o el mismo propósito.

Un error frecuente es transformar cualquier atributo presente en un token en una autorización automática. La API debe saber qué claims fueron emitidos por una autoridad confiable y cómo encajan en su modelo de acceso.

15.6 JWT: qué es y por qué aparece tanto en APIs

JWT, o JSON Web Token, es un formato de token que puede transportar información firmada digitalmente. Se popularizó en APIs porque permite enviar, de forma compacta, datos verificables sin requerir necesariamente una consulta al emisor en cada solicitud.

Eso lo vuelve atractivo en arquitecturas distribuidas, donde múltiples servicios necesitan validar tokens con baja latencia. Pero su popularidad también generó simplificaciones peligrosas, como asumir que por ser un JWT ya está “todo resuelto”.

15.7 Estructura conceptual de un JWT

Conceptualmente, un JWT suele contener tres partes:

  • Header: indica información sobre el tipo de token y el algoritmo usado.
  • Payload: contiene claims, es decir, datos sobre identidad, contexto, emisor, audiencia y tiempos.
  • Signature: permite verificar integridad y origen cuando la validación se hace correctamente.

Esto no implica que el contenido sea secreto. En muchos casos, un JWT firmado puede ser leído por quien lo recibe, aunque no pueda modificarlo sin invalidar la firma. Por eso no conviene tratarlo como un contenedor apto para cualquier dato sensible.

15.8 Qué no significa tener un JWT

Tener un JWT no significa automáticamente que:

  • el usuario esté autenticado para cualquier propósito;
  • la API deba aceptar ese token sin más verificaciones;
  • la acción solicitada esté autorizada;
  • el token siga vigente;
  • el emisor sea confiable para esa API concreta.

El token es solo una pieza del mecanismo. La seguridad real depende de cómo fue emitido, qué representa, qué valida la API y qué controles adicionales aplica sobre el recurso y la operación.

15.9 Access token e ID token: no cumplen la misma función

En ecosistemas basados en OpenID Connect es común encontrar tanto access tokens como ID tokens. No son intercambiables.

El access token está pensado para que una API determine si acepta una llamada y bajo qué alcance. El ID token, en cambio, representa autenticación e identidad del usuario para el cliente que inició el flujo. Una API no debería asumir que un ID token sirve como sustituto general de un access token.

Usar el token incorrecto suele producir diseños frágiles, dependencias implícitas y validaciones inconsistentes.

15.10 Validaciones mínimas que una API debe realizar

Cuando una API recibe un token, al menos debe comprobar:

  • que el token provenga de un issuer confiable;
  • que la audience incluya a la API o recurso esperado;
  • que no esté expirado y, si aplica, que respete ventanas como nbf o tiempos de emisión razonables;
  • que la firma o el mecanismo de validación sean correctos;
  • que el tipo de token sea el apropiado para ese uso;
  • que los scopes o claims requeridos estén presentes.

Estas comprobaciones son la base, no el final del proceso. Después viene la autorización real sobre la operación y el recurso concreto.

15.11 Introspección de tokens: qué es y cuándo conviene

La introspección consiste en consultar a un servidor de autorización o componente confiable para saber si un token está activo y qué significado tiene. En lugar de depender solo de información auto-contenida, la API pregunta a la autoridad emisora por el estado actual del token.

Este enfoque resulta útil cuando se necesita control más centralizado, revocación más inmediata o cuando se trabaja con tokens opacos cuyo contenido no está destinado a ser interpretado directamente por la API.

La contracara es que agrega dependencia de red, latencia y necesidad de alta disponibilidad del servicio de introspección.

15.12 Tokens auto-contenidos versus tokens opacos

Tipo de token Ventaja principal Límite principal
Auto-contenido, como muchos JWT Validación local rápida y menor dependencia por llamada Revocación y cambios de estado menos inmediatos
Opaco con introspección Mayor control centralizado y mejor reacción ante revocación Más latencia y dependencia operativa del servidor emisor

No hay una respuesta universal. La elección depende del equilibrio entre autonomía de validación, rendimiento, sensibilidad del acceso y necesidad de control en tiempo cercano al real.

15.13 Scopes y autorización de negocio no son lo mismo

Uno de los errores más comunes en APIs es creer que el scope agota la decisión de autorización. En realidad, el scope suele responder a una pregunta amplia: “este token fue emitido para hacer este tipo de cosas”. Pero la autorización de negocio exige preguntas más específicas, por ejemplo:

  • ¿puede este usuario ver este expediente y no otro?
  • ¿puede este supervisor aprobar montos hasta cierto límite?
  • ¿puede este servicio modificar datos de esta organización pero no de otra?

Eso requiere evaluar reglas de dominio, relaciones con el recurso, pertenencia a tenant, estado del objeto, contexto organizacional y otras condiciones que rara vez quedan completamente modeladas solo con scopes.

15.14 Riesgos frecuentes en APIs protegidas con tokens

  • Aceptar un token firmado sin verificar correctamente emisor, audiencia o expiración.
  • Confiar en claims no destinados a autorización o emitidos sin suficiente garantía.
  • Usar scopes demasiado amplios que vuelven al token excesivamente poderoso.
  • Tratar un JWT como si fuera una sesión perpetua difícil de revocar.
  • Permitir que el frontend determine permisos efectivos sin validación del backend.
  • No distinguir entre acceso delegado de un usuario y acceso propio de un cliente máquina a máquina.
  • Diseñar APIs que aceptan cualquier token “válido” aunque no haya sido emitido para ese recurso.

15.15 Buenas prácticas para diseño y operación

  • Emitir tokens con vida útil acotada y alcance mínimo necesario.
  • Definir con claridad qué claims son informativos y cuáles participan de decisiones de acceso.
  • Verificar sistemáticamente issuer, audience, expiración y firma.
  • Separar autenticación técnica del token y autorización de negocio sobre recursos.
  • Evitar sobrecargar scopes con toda la lógica del dominio.
  • Usar introspección o mecanismos de revocación acordes al nivel de riesgo.
  • Registrar decisiones relevantes para auditoría y trazabilidad.

15.16 Qué debes recordar de este tema

  • Una API debe validar más que la mera presencia de un token.
  • Los scopes delimitan alcance, pero no reemplazan la autorización fina de negocio.
  • Los claims aportan contexto, pero deben interpretarse según su origen y propósito.
  • Un JWT facilita validación distribuida, aunque no elimina la necesidad de controles adicionales.
  • La introspección aporta control centralizado, con costo operativo y de latencia.
  • El backend que protege el recurso sigue siendo la autoridad final sobre la operación permitida.

15.17 Conclusión

La seguridad de una API no depende de adoptar una sigla de moda, sino de encadenar correctamente autenticación técnica, validación de tokens y autorización real sobre recursos y acciones. Scopes, claims, JWT e introspección son herramientas útiles, pero solo producen buen resultado cuando se entienden sus límites y se integran dentro de un modelo de acceso coherente.

En el próximo tema analizaremos los identity providers, los authorization servers y la arquitectura general de una solución IAM, para ver dónde encajan todos estos componentes dentro de un sistema más amplio.