
Todos sabemos lo valiosas que son las API. Son la puerta de entrada para explorar otros servicios, integrarse con ellos y crear excelentes soluciones más rápido.
Es posible que haya creado o esté pensando en crear API para que las utilicen otros desarrolladores. Una API necesita algún tipo de autenticación para proporcionar acceso autorizado a los datos que devuelve.
Hay varios estándares de autenticación disponibles en la actualidad, como claves API, OAuth, JWT, etc.
En este artículo, veremos cómo administrar correctamente las claves de API para acceder a las API.
Entonces, ¿por qué claves API?
Las claves de API son fáciles de usar, son cortas, estáticas y no caducan a menos que se revoquen. Proporcionan una forma sencilla de comunicación de varios servicios.
Si proporciona una API para que la consuman sus clientes, es fundamental que la cree de la manera correcta.
Comencemos y le mostraré cómo crear claves API de la manera correcta.
Generación de claves API
Dado que la clave API en sí misma es una identidad mediante la cual identificar la aplicación o el usuario, debe ser única, aleatoria y no adivinable. Las claves de API que se generan también deben utilizar caracteres alfanuméricos y especiales. Un ejemplo de una clave API de este tipo es zaCELgL.0imfnc8mVLWwsAawjYr4Rx-Af50DDqtlx
.
Almacenamiento seguro de claves API
Dado que la clave API proporciona acceso directo a los datos, se parece mucho a una contraseña que proporciona un usuario de una aplicación web o móvil para obtener acceso a los mismos datos.
Piénsalo. La razón por la que necesitamos almacenar las claves de API es para asegurarnos de que la clave de API en la solicitud sea válida y la emitamos nosotros (como una contraseña).
No necesitamos conocer la clave de API sin procesar, solo necesitamos validar que la clave sea correcta. Entonces, en lugar de almacenar la clave en texto plano (incorrecto) o encriptarla, deberíamos almacenarla como un valor hash dentro de nuestra base de datos.
Un valor hash significa que incluso si alguien obtiene acceso no autorizado a nuestra base de datos, no se filtran claves API y todo está seguro. El usuario final enviaría la clave de API sin procesar en cada solicitud de API, y podemos validarla haciendo hash de la clave de API en la solicitud y comparar la clave de hash con el hash almacenado en nuestra base de datos. Aquí hay una implementación aproximada en Java:
En el código anterior, la clave principal será una combinación del prefijo y el hash de la clave API {prefix}.{hash_of_whole_api_key}
.
Pero espera, hay más. El almacenamiento de un valor hash conlleva problemas de usabilidad específicos. Abordemos esos ahora.
Presentar la clave API a los usuarios
Dado que no almacenamos la clave de API original, podemos mostrarla solo una vez al usuario, en el momento de la creación. Por lo tanto, asegúrese de alertar a los usuarios de que no se puede recuperar nuevamente y que deben generar un nuevo token si olvidan copiar la clave API y almacenarla de manera segura. Puedes hacer algo como esto:

Cómo los usuarios pueden identificar una clave API generada más tarde
Otro problema es cómo los usuarios identifican la clave API correcta en su consola si necesitan editarla o revocarla. Esto se puede resolver agregando un prefijo a la clave API. Observe en la imagen de arriba los primeros 7 caracteres (ese es nuestro prefijo), separados por el punto.
Ahora puede almacenar este prefijo en la base de datos y mostrarlo en la consola para que los usuarios puedan identificar rápidamente la entrada de clave API correcta, como esta:

No le dé a la clave API todo el poder
Un error común que cometen los proveedores de claves API es proporcionar una clave para acceder a todo , ya que es fácil de administrar. No hagas eso. Suponga que un usuario solo necesita leer un correo electrónico y genera una clave API. Pero esa clave ahora tiene acceso completo a otros servicios, incluida la eliminación de registros en la base de datos.
El enfoque correcto es permitir que los usuarios finales restrinjan adecuadamente el acceso a la clave API y elijan acciones específicas que una clave API puede realizar. Esto se puede hacer proporcionando ámbitos , donde cada ámbito representa un permiso específico.
Por ejemplo,
- si necesita una clave API para enviar correos electrónicos, puede generar una clave API con el alcance como "email.send"
- si el usuario final tiene varios servidores y cada uno lleva a cabo una acción específica, entonces se puede generar una clave API separada con un alcance específico.
Entonces, mientras crea la clave API, permita a los usuarios seleccionar qué acceso debe tener esa clave API, como en la imagen a continuación.

De esta manera, los usuarios pueden generar múltiples claves API, cada una con reglas de acceso específicas para una mayor seguridad. Y cuando se recibe una solicitud de API, puede verificar si la clave de API tiene el alcance correcto para acceder a esa API. Ahora la base de datos se parece a esto:

Tasa de limitación de claves de API
Sí, es posible que ya lo sepa, pero es importante limitar las solicitudes realizadas con claves de API específicas para garantizar que ningún actor malo pueda derribar sus servidores de API o causar problemas de rendimiento que afecten a sus otros clientes. Tener una solución de supervisión y limitación de velocidad adecuada mantiene el servicio de API en buen estado.
Conclusión
Las claves de API, cuando se construyen correctamente, siguen siendo una excelente manera de comunicarse con otro servidor. Como revisamos en este artículo, seguir ciertas prácticas ofrece beneficios tanto para los consumidores de API como para los proveedores de API. Espero que esto te ayude.
¡Feliz asegurando sus API!