Comenzaremos con la definición estándar:
Una clave API es una cadena de caracteres que se utiliza para identificar y autenticar una aplicación o usuario que solicita el servicio de una API (interfaz de programación de aplicaciones).
En este artículo, desglosamos esta definición para las personas curiosas (tecnologías o no tecnología) que desean conocer la historia interna de qué es y qué hace una clave API, y cómo funciona.
Una clave API es el mecanismo de seguridad estándar para cualquier aplicación que proporcione un servicio a otras aplicaciones.
Si bien no son el único método (las API pueden usar JWT, sobre lo que escribimos aquí: claves de API frente a autenticación de JWT ) , las claves de API son el método más utilizado para proteger una API.
La API de Google Maps es un ejemplo de un servicio de API ("punto final") que requiere una clave de API. Si le da a la API de Google una dirección física (por ejemplo, "1001 Main Street, NY, NY"), la API devolverá la latitud y la longitud de la ubicación más probable (40.736124774992504, -73.82508447321075).
Sin embargo, sin una clave de API válida, Google no responderá a su solicitud. Necesitas un permiso especial. La clave API le permite a Google saber quién es usted y si tiene derecho a acceder a su servicio de mapas.
Esto se denomina autenticación (a diferencia de la autorización, que trataremos más adelante en este artículo).
Por cierto, solo para entender cómo funciona el mecanismo, cuando escribimos "Le damos una dirección a la API de Google" o "Le enviamos a Google una clave de API", nos referimos a enviar información a un servidor de Google (haciendo una solicitud a través de métodos de solicitud HTTP como Publicar y Obtener) y recibir información (obtener una respuesta de la misma API).
En suma:
Si un desarrollador desea crear una aplicación de mapas utilizando la lista casi exhaustiva de direcciones mundiales de Google, primero deberá registrarse en Google y obtener una clave API para tener derecho a usar su servicio API de mapas de Google.
Algunas API no requieren una clave de API. Por ejemplo, la URL de Youtube que usa para ver un video es en realidad una solicitud de API que no requiere una clave de API.
Es de uso gratuito desde cualquier parte del mundo, en cualquier dispositivo, para todas las personas (no solo para los desarrolladores).
Dicho esto, las API de Youtube también ofrecen otros servicios que requieren una clave de API, como los que brindan información (privada o generalmente pagada) sobre listas de reproducción de canales, historial de comentarios, estadísticas de uso y cientos de otros datos propiedad de Youtube.
Una preocupación central con cualquier API es su facilidad de uso. Como repetiremos a continuación en el contexto de la seguridad: la facilidad de uso es primordial para el uso de la API.
Todas las empresas que priorizan API quieren minimizar toda la fricción al usar sus productos API. Esto incluye hacer que el acceso a sus API sea fácil y seguro, que es exactamente para lo que están diseñadas las claves de API.
Como se describió anteriormente, una clave API permite que un servidor identifique a cualquier desarrollador o aplicación (el solicitante o usuario ) que intente acceder a sus servicios.
Una clave API también define un conjunto de derechos de acceso . Los derechos de acceso autorizan al solicitante a realizar acciones específicas y le prohíben realizar otras acciones.
Entremos en los detalles.
Sus claves API son identificadores únicos compuestos por una combinación de números y letras. Algunos también contienen caracteres no alfanuméricos.
El identificador único no significa nada por sí mismo; su único significado es su singularidad. Es similar a una contraseña o código secreto.
Las claves API generalmente contienen más de 64 caracteres y son generadas por aleatorizadores del sistema que crean identificadores únicos universales (a menudo llamados GUID ).
Piense en una clave API como una forma de obtener acceso a los datos y la funcionalidad de una aplicación a través de una API.
Cada solicitante de API envía al servidor un identificador único, que el servidor utiliza para determinar ( autenticar ) si la persona o aplicación que solicita el servicio tiene derecho a hacerlo.
Si el servidor no puede autenticar al solicitante de una llamada API (solicitud), envía una respuesta de falla. Esta es la idea básica detrás de por qué crea una clave API: si está utilizando una clave que el servidor no reconoce, entonces no podrá usar el servicio.
Sin embargo, si el servidor reconoce la clave API y autentica al titular de la clave, entonces ese usuario tiene derecho a utilizar el servicio.
El siguiente paso es que el servidor autorice al solicitante a hacer una o más cosas.
El proceso de autorización determina los derechos y el alcance de un solicitante. La autorización define la manera exacta en que un solicitante autenticado puede usar una API.
Implica definir sus derechos (a qué funcionalidad y datos puede acceder) y alcance (cuántos datos, cuánto tiempo puede usar la API y más).
Los derechos se refieren a lo que puedes hacer. Si la clave API del solicitante contiene el derecho a buscar los datos, entonces el solicitante puede leer los datos para realizar la búsqueda.
Si el solicitante tiene derecho a escribir datos, entonces el solicitante puede realizar algunas o todas las operaciones de escritura . El acceso de escritura generalmente viene con más detalles. Por ejemplo, el solicitante podría tener derecho a actualizar un índice pero no a eliminar registros.
También puede combinar derechos. Por ejemplo, un solicitante puede tener capacidades de lectura y escritura, o solo lectura. Por lo general, los solicitantes tienen varias API para realizar diferentes acciones. Por ejemplo:
Solo lectura para búsquedas.
Acceso de lectura y escritura para navegar e indexar (añadir, actualizar, eliminar).
Acceso de administrador , que incluye todo, incluida la creación de otras API.
Cada sistema de API tiene una clave de API global que no solo permite operaciones de lectura y escritura, sino también acceso total a cualquier otra cosa que pueda hacer una API.
Por ejemplo, una API de administración permite que las aplicaciones y los usuarios realicen metaacciones como agregar, eliminar o modificar usuarios, identificadores, derechos y ámbitos.
Dada la potencia de una clave de API de administrador, querrá que esta clave de API sea completamente segura, es decir, oculta y bloqueada del público.
Lo mismo se aplica a cualquier clave API de nivel de escritura. Las claves de solo lectura pueden ser más flexibles según el caso de uso. La lectura de datos comerciales confidenciales obviamente requiere mayor seguridad que la búsqueda de productos y películas en un sitio web.
Una vez que un solicitante tiene derecho a hacer algo, una API puede restringir o expandir las capacidades del solicitante dentro de ese derecho. Por ejemplo, si un solicitante tiene el derecho general de actualizar índices, la clave de API puede limitar el acceso del solicitante solo a ciertos índices.
O bien, la clave API puede abarcar el acceso de solo lectura que permite a un solicitante acceder solo a una pequeña cantidad de registros.
Puede usar el alcance para mayor seguridad filtrando ciertas direcciones IP. También puede establecer un tiempo de validez, tal vez una solicitud por día, o una pequeña cantidad diaria de solicitudes durante un período de 30 días.
Finalmente, una clave API puede proporcionar limitaciones basadas en filtros. Por ejemplo, una clave API puede permitir que un usuario actualice solo artículos de "ropa" o "comida". O puede restringir un solicitante de solo lectura para realizar búsquedas o filtros predefinidos.
Un buen ejemplo del último punto sobre el uso restrictivo de API es cuando otorga acceso de solo lectura, pero lo restringe con un filtro que omite datos confidenciales. Esto agrega seguridad adicional, lo que permite al solicitante ver datos diseñados solo para visualización pública.
Pero la seguridad requiere más discusión.
En términos de seguridad, una clave API solo llega hasta cierto punto. Esencialmente, si una clave es robada o filtrada, no hay más seguridad.
Hay muchas maneras en que alguien puede obtener una clave de API. Los piratas informáticos pueden interceptar la solicitud, robar la clave y luego cambiar la solicitud en algo mucho más dañino.
O, como suele ser el caso, un desarrollador puede revelar accidentalmente la clave API enviándola a través de Internet para que cualquiera pueda encontrarla fácilmente. O empujarlo accidentalmente a un repositorio de Git. O escríbalo en una servilleta y déjelo en la mesa del restaurante.
Algunas medidas de seguridad se basan en controles de seguridad adicionales. Algunos de estos métodos requieren que el solicitante realice un trabajo adicional, lo que socava la popularidad de una API. Vale la pena tener en cuenta la API 101:
La facilidad de uso es primordial para el uso de la API, por lo que desea minimizar toda la fricción.
Aquí hay algunas medidas de seguridad que no requieren gastos generales ni cargas adicionales para el usuario de la API:
Crear límites de tasa, que controlan la cantidad de veces que se puede llamar a la API.
Crear otros límites o restricciones de aplicación para minimizar los ataques.
Uso de métodos de detección de ataques para señalar comportamientos inesperados, referentes o comportamientos de ataques conocidos.
Rechazar solicitudes que se salgan de lo normal o dañen la privacidad o los datos.
Y como se mencionó anteriormente, eliminar el acceso a datos no confidenciales.
Cree manualmente o automatice la generación de nuevas claves de API con regularidad.
Nota técnica: muchas de estas medidas de seguridad se pueden agregar en el encabezado como parámetros en la solicitud de API.
Estas son las técnicas de seguridad de API más populares que requieren que los desarrolladores hagan más que solo proporcionar una clave de API:
Usando un tipo especial de clave API llamada Clave API segura.
Inicio de sesión y uso de ID de usuario y contraseñas.
Uso de tokens de autenticación (p. ej., tokens JWT) para autenticación y autorización.
Cifrado. Para que esto funcione, el usuario debe tener el mismo software de cifrado que tiene el servidor API. El software de encriptación convierte la clave API en datos ilegibles, que solo el servidor API puede entender.
Una clave de API segura contiene medidas de seguridad adicionales sobre la clave de API estándar: (a) es efímera (se crea sobre la marcha y es temporal); como tal, no se puede ver en un tablero para modificarlo o administrarlo de ninguna manera.
Más importante aún, (b) contiene la identificación del usuario; por lo tanto, solo un usuario puede usar la clave.
Normalmente, las claves de API se generan una vez , para cualquier usuario, y permanecen iguales de por vida. Sin embargo, hay dos inconvenientes con las claves permanentes:
Una vez que alguien robe la clave, podrá usarla hasta que se descubra el robo y se elimine la clave.
Si necesita que decenas de miles de usuarios tengan claves únicas, deberá crearlas y mantenerlas todas. Y aunque puede automatizar la generación de nuevas claves de API, casi siempre tendrá que cambiar manualmente el código.
La mayoría de las aplicaciones de nivel de producción necesitan algo más seguro y más fácil de administrar, sin ningún trabajo adicional.
Cómo funciona: una clave de API segura aprovecha la sesión y/o la identificación del usuario al incluir esa información como parte de la generación de claves. Esencialmente, la clave se genera sobre la marcha al combinar el identificador de usuario con el alcance de la clave (por ejemplo, límites de tiempo de espera, filtros de seguridad).
Una vez que se genera la clave, el solicitante siempre debe enviar la clave API generada y su ID de usuario y alcance. El servidor API luego volverá a generar la clave utilizando la identificación y el alcance del usuario, luego la comparará con la clave que envió el usuario. Si difieren, obviamente es un truco.
Esta lógica de doble verificación es solo un paso hacia una mejor seguridad. El siguiente paso es pedirle al usuario de la API que inicie sesión.
El último método de seguridad que mencionaremos aquí implica requerir que el usuario de la API inicie sesión.
En este escenario, si el inicio de sesión es exitoso, el servidor de la API emite un token único e ilegible que el usuario de la API debe usar mientras permanece conectado. Además, el token incluye las credenciales del usuario, lo que dificulta que alguien que no sea el usuario enviar la ficha.
Por lo tanto, mejoramos el método de clave de API segura temporal de dos maneras importantes:
JWT requiere un inicio de sesión.
JWT genera un token cuyo valor contiene una versión cifrada de las credenciales de inicio de sesión del usuario. Esas credenciales de usuario permiten que el servidor API autentique al usuario con cada solicitud API sucesiva.
Obtenga más información sobre el token JWT y cómo se diferencia de una clave API.
Hemos discutido los propósitos de la clave de API, cómo se ve, cómo funciona y cómo se puede y no se puede hacer con una clave de API.
También hemos entrado en algunos detalles sobre la seguridad. Terminaremos con otro aspecto: el del seguimiento del uso de la API y la mejora de la API.
Una API se basa en la experiencia del usuario para mejorar su diseño y funcionalidad. Una empresa que quiera ofrecer la mejor API absoluta en el mercado de API cada vez más competitivo, debe saber cómo utilizan sus clientes sus API.
Al registrar cada solicitud, qué solicitudes, la cantidad de solicitudes, el éxito y las fallas de cada solicitud, el proveedor de la API agrega informes, depuración y análisis al diseño y la implementación de la API.