Claves API: diseño y seguridad para desarrolladores

Fuentes: My adventure in designing API keys

Este artículo del blog explora el diseño y la creación de claves de API, un mecanismo crucial para la autenticación y autorización en APIs públicas. El autor, un desarrollador que ha evolucionado de DevOps a Product Developer, comparte su investigación y experiencia en este campo. Las claves de API son esencialmente tokens que permiten a los usuarios acceder a APIs sin la necesidad de sesiones, simplificando el proceso de autenticación.

La estructura típica de una clave de API incluye un prefijo (que indica el tipo de clave o la empresa asociada), una cadena hexadecimal aleatoria y un checksum. El checksum es vital para la validación rápida de la clave antes de acceder a la base de datos, previniendo errores de tipeo o caracteres faltantes. Una vez creada, la clave de API se hashea y se almacena, asegurando su seguridad, similar a una contraseña. Esto también explica por qué es fundamental copiar la clave inmediatamente después de su generación.

El artículo aborda un desafío específico: cómo enrutar las solicitudes a la base de datos correcta en un sistema multi-tenant con sharding. Inicialmente, se propuso un enfoque directo de hashear la clave de API y mapearla a un ID de cuenta, lo cual demostró ser eficiente. Sin embargo, el autor buscó optimizar aún más este proceso, considerando alternativas como el uso de un prefijo de clave de API único asociado a una empresa y mapeado a un ID de cuenta. También exploró el uso de algoritmos de codificación como Base62 y Base70 para reducir el tamaño de la clave y acelerar las búsquedas, pero los resultados iniciales fueron sorprendentemente más lentos de lo esperado.

La investigación reveló que el uso de B-Tree en PostgreSQL es eficiente incluso con cadenas de texto, y que las operaciones con BigInt en JavaScript (necesarias para la codificación Base62/70) son significativamente más lentas que las comparaciones de hashes directas. Finalmente, el autor optó por un enfoque basado en el algoritmo SHA3, reconociendo que la optimización no siempre conduce a mejoras y que la simplicidad y la eficiencia inherente de un enfoque directo pueden ser más valiosas. El artículo ofrece una visión detallada del proceso de diseño de claves de API, los desafíos encontrados y las lecciones aprendidas en la búsqueda de la optimización.