Claves API - Cadenas de autenticación entre servicios
Lectura de 2 min aprox.
Una clave de API es una cadena única que se utiliza para identificar a quien realiza la llamada en la comunicación entre aplicaciones. Al acceder a una API proporcionada por un servicio web o una plataforma en la nube, incluir la clave de API en la solicitud permite al servidor determinar «quién está llamando a esta API». Sin embargo, en sentido estricto, una clave de API es un medio de identificación y no de autenticación, y es necesario comprender que difiere fundamentalmente del control de permisos detallado que ofrecen los tokens como los de OAuth.
Cómo funcionan las claves de API
Hay principalmente dos formas de enviar una clave de API. La primera es incluirla en el encabezado de la solicitud, insertándola en un encabezado HTTP como <code>Authorization: Bearer sk-xxxx</code> o <code>X-API-Key: xxxx</code>. La segunda es adjuntarla a la URL como parámetro de consulta (<code>?api_key=xxxx</code>), pero esta ya no se recomienda por motivos de seguridad, ya que la clave queda registrada en los registros del servidor y en el historial del navegador. Incluso con el método de encabezado, si la comunicación no está cifrada con TLS, la clave circula en texto plano, por lo que el uso de HTTPS es un requisito fundamental.
La diferencia entre las claves de API y los tokens OAuth
Una clave de API es un identificador que indica «de qué aplicación proviene esta solicitud» y normalmente es una cadena fija. Por su parte, un token de acceso de OAuth es un token dinámico que expresa «qué usuario concedió la autorización, con qué alcance (rango de permisos) y hasta cuándo es válida». Si una clave de API se filtra, existe el riesgo de que todas las operaciones vinculadas a esa clave se ejecuten sin límite, mientras que un token OAuth puede acotar el alcance del daño mediante alcances limitados y tiempos de expiración. En la práctica, es habitual usar una clave de API para limitar el uso de una API pública y un token OAuth para acceder a los datos del usuario.
La realidad de los incidentes de filtración de claves
La filtración de claves de API es uno de los incidentes de seguridad más frecuentes en los entornos de desarrollo. No cesan los casos en que alguien sube por error una clave de acceso de AWS a un repositorio público de GitHub y, en cuestión de minutos, es detectada por bots de escaneo automático y aprovechada para la minería de criptomonedas. En 2023, el hecho de que una empresa pegara una clave de API en un mensaje de Slack derivó en una filtración de datos a gran escala. AWS ha implementado un mecanismo que detecta y revoca automáticamente las claves filtradas en GitHub, pero todavía hay casos en los que el daño se produce en el breve lapso previo a la detección. También en la lista de verificación de seguridad para startups, la gestión de claves figura como un elemento de máxima prioridad.
Mejores prácticas para la gestión de secretos
Escribir una clave de API directamente en el código fuente (hardcoding) es el antipatrón más peligroso. En su lugar, la medida mínima es gestionar las claves con variables de entorno (un archivo <code>.env</code>) y excluirlas del seguimiento de Git con <code>.gitignore</code>. Para operaciones más robustas, se utiliza un servicio de gestión de secretos como HashiCorp Vault o AWS Secrets Manager. Estos servicios ofrecen funciones como el cifrado en reposo de las claves, el registro de accesos y la rotación automática, lo que permite gestionar de forma segura todo el ciclo de vida de las claves. Como principio básico de la gestión de claves, es importante restringir las personas y los sistemas que pueden acceder a las claves al privilegio mínimo.
Las técnicas prácticas para la gestión de secretos también se explican de forma sistemática en libros sobre seguridad de API (Amazon).
La importancia de la rotación
Las claves de API deben reemplazarse periódicamente por otras nuevas (rotación). En muchos casos, una clave se filtra sin que nadie lo note, y la rotación periódica funciona como un seguro que limita el período de daño de esas «filtraciones inadvertidas». AWS y Google Cloud recomiendan la rotación cada 90 días y también ofrecen funciones de rotación automática. Durante la rotación, establecer un «período de gracia» en el que tanto la clave antigua como la nueva sigan siendo válidas durante un tiempo determinado evita las interrupciones del servicio. Consulte también la guía detallada sobre la gestión de claves de API.
Conceptos erróneos comunes
El concepto erróneo de que «la seguridad es total mientras se tenga una clave de API» está muy arraigado, pero una clave de API no es más que un identificador y, por sí sola, no proporciona protección suficiente. Además de la clave de API, es imprescindible una defensa en profundidad que combine restricciones de direcciones IP, limitación de velocidad, comprobaciones de referente y similares. Asimismo, incrustar una clave de API en el JavaScript del front-end permite que cualquiera la vea a través de las herramientas de desarrollador del navegador, por lo que, como principio, el diseño debe manejar las claves únicamente en el lado del servidor.
¿Te resultó útil este artículo?