Cómo Proteger tu API Guía de Autenticación

Cómo Proteger tu API: Guía de Autenticación

Una parte crucial para el diseño de la arquitectura de una API es decidir qué datos serán públicos y cuáles no. También, qué tipo de usuarios podrán acceder a cierto tipo de información. En este artículo, exploraremos diferentes métodos de autenticación, sus formas de implementación y las ventajas y desventajas de cada uno de los métodos. Gracias a todos estos consejos descubrirás cómo proteger tu API.

¿Cómo funciona la autenticación en una API?

La autenticación en una API es el proceso que verifica la identidad de un usuario o de una aplicación que intenta acceder a la misma. Por tanto, este proceso es fundamental para asegurar que solo los usuarios o aplicaciones autorizadas puedan acceder a los recursos proporcionados por la API. 

Este proceso sirve tanto para proteger el acceso a la API de usuarios no autorizados, como para realizar controles de acceso basados en el usuario. Todo ello permite controlar que sólo los usuarios autorizados puedan entrar y, además, segregar dentro de esos usuarios qué roles pueden realizar dependiendo de las acciones.

También, puede servir para rastrear quién accede a la API y qué acciones realizar, ya que, en algunos tipos de autenticación, los tokens generados van asociados a un usuario en concreto. De esta forma, se puede realizar una auditoría para poder determinar si un usuario está llevando a cabo un uso sospechoso de nuestro servicio. Por tanto, se contribuye a que se reduzca el riesgo de que haya usuarios que hagan un uso excesivo de recursos o puedan haber ataques de denegación de servicio (DDoS).

¿cómo es una API sin autenticación?

Consiste en tener la información totalmente expuesta al público, ya que no se comprueba qué usuario está realizando la petición. De este modo, cualquier persona que haga uso de este endpoint podrá acceder a la información o podrá alterar los datos almacenados en la base de datos relacionados con dicho endpoint.

¿Cómo es una API sin autenticación?

Como es de suponer, este método no contiene ninguna particularidad de cara a ser implementado.

Las ventajas que presenta son las siguientes:

  • Debido a su carencia de necesidad de configuración, son simples de implementar y utilizar.
  • Tienen un acceso rápido, por lo que son ideales para servicios públicos o para poder recuperar datos que no necesitan ser protegidos.
  • A causa de esta ausencia de configuración es totalmente vulnerable a ataques, cualquier persona puede acceder a la API.
  • No se recomienda su uso para aplicaciones que gestionen datos sensibles y mucho menos para cualquier acción que pueda llegar a alterar los datos almacenados.

En conclusión, este tipo de endpoints deberían reservarse para datos simples. Como algún método que recupere el último número o nombre de la versión del producto, o para recuperar los textos de traducción de una página pública.

API con autenticación vía API Key

La autenticación en una API vía API Key se basa en que el propio sistema genera una clave que, en cada endpoint de la API, se comprobará que esté registrado en el servicio para poder acceder a los datos.

La implementación de este método requiere de varios pasos. Te los contamos:

  1. El primero es que hay que identificar al proveedor del servicio (API) y al consumidor de los servicios del proveedor (cliente).
  2. Una vez identificados, se debe implementar un endpoint mediante el que, desde el lado del proveedor del servicio, se genere una API Key asociada a un cliente en concreto con una duración determinada del token. De esta manera, el sistema tiene control de quién tiene acceso a esa API, y hasta cuándo puede tener acceso.
  3. Tras esto, el usuario podrá acceder a la aplicación del proveedor del servicio y podrá ver la API Key asociada a su aplicación. También podrá ser forma automática, o bien tras ser validado por parte del proveedor. Así ya se puede anotar esta clave y autenticar todas las llamadas realizadas al proveedor del servicio desde su aplicación.
API con autenticación vía API Key

Cada vez que se realiza una llamada a un endpoint se comprueba la validez del token generado y, a continuación, ya se elabora cualquier acción que tenga que hacer dicho endpoint.

Ventajas y desventajas de la autenticación vía API Key

La ventaja que ofrece este método de autenticación es que permite controlar el acceso a la información a un grupo de usuarios. Es sencillo de revocar, puesto que desde la aplicación del proveedor de servicios se puede dar de baja un token en cualquier momento.

La parte negativa es que las API Keys dan acceso a la API directamente y no hacen una segregación por usuarios. De igual manera, necesitan varios pasos intermedios para configurarlo, como generar la clave en el proveedor y anotar dicha clave en la aplicación cliente. Es importante decir que cualquier usuario que tenga el token podrá acceder a los datos aunque no sea el usuario que lo haya generado.

Este tipo de autenticación se reserva para servicios que van a ser consumidos por otros servicios. Por ejemplo, una API que presenta la información climatológica y una página web que ofrece datos sobre una ciudad en concreto.

API con autenticación vía JWT (JSON Web Token)

JSON Web Token es un estándar abierto basado en JSON. Éste crea tokens de acceso que permiten verificar la identidad de un usuario, sin necesidad de almacenar información adicional en el servidor.

La autenticación mediante JWT sigue una estructura simple en la que:

  • El usuario se autentica en la aplicación proporcionando sus credenciales. Por ejemplo, proporcionando un usuario y una contraseña.
  • La aplicación envía estas credenciales a un servidor de autenticación. Si las credenciales son válidas el servidor genera un token JWT firmado y lo envía al usuario como respuesta.
  • El usuario integra este token de autorización en la cabecera de cada solicitud que realice a la API.
  • La API pasa a verificar en cada llamada que reciba la validez de dicho token comprobando si es válido, si el usuario está autorizado y si el token no está caducado.
API con autenticación vía JWT (JSON Web Token)

Pros y contras de la autenticación mediante JWT

Las ventajas que ofrece la autenticación mediante JWT es que son tokens firmados y encriptados, por lo que la información no se puede manipular. Puesto que no hay que almacenar información de la sesión en el servidor la carga almacenada en el servidor se reduce y se simplifica el escalado de la aplicación. Cabe decir que la portabilidad de los tokens es óptima para una arquitectura de microservicios, ya que son independientes del dominio de la aplicación.

Las desventajas de esta implementación es que la revocación de los tokens es compleja, por lo que no se puede quitar el acceso de un token generado hasta que se caduca. Por tanto, hasta que expira, puede ser utilizado para acceder a los recursos de la aplicación. Pero, esto puede ser solucionado activando un método de refresco del token e implementando una duración del token reducida (por ejemplo, de 15 minutos). Sin embargo, esto aumenta la complejidad a la hora de implementar este método de autenticación.

API con autenticación vía OAuth 2.0

OAuth 2.0 es un estándar de autenticación que permite a un usuario o a una aplicación obtener un acceso limitado a los recursos de una API. Este protocolo no proporciona credenciales para un usuario, sino que emite tokens de acceso a las aplicaciones cliente para que actúen en nombre del usuario.

Esto suele identificarse fácilmente en todos los servicios que requieren de una confirmación de acceso a una cuenta ya existente de un proveedor de servicios, como puede ser Microsoft.

API con autenticación vía OAuth 2.0

Para implementar esto, el encargado debe seleccionar un proveedor de servicios. Para este ejemplo, utilizaremos Azure Active Directory.

Primero, se deberá registrar la aplicación en el Active Directory, lo cual nos generará un JSON necesario para realizar las peticiones relacionadas con el servicio de autenticación. Dicho JSON deberá ser almacenado en el fichero de configuración de nuestra aplicación. 

La aplicación cliente, en cada una de las peticiones, comprobará si existe un token generado por Active Directory. En caso de que este no exista, redirigirá al usuario al servidor de autorización para que autorice el acceso. Esto se maneja por parte del cliente de forma que se almacenaría internamente en la aplicación web o móvil.

Después de que el usuario autoriza el acceso, el Active Directory redirigirá al usuario de vuelta a la aplicación cliente con un código de autorización que aportará un token de acceso, el cual puede ser reutilizado para hacer solicitudes a la API directamente.

API con autenticación vía OAuth 2.0

Beneficios y desventajas de la autenticación vía OAuth 2.0

Las ventajas que ofrece son notorias, ya que, principalmente, las credenciales del usuario no se comparten con ninguna aplicación. Además, los tokens pueden ser revocados directamente sin afectar a las credenciales del usuario. Por tanto, es especialmente útil para aplicaciones con múltiples usuarios, pues permite una gestión óptima de los permisos proporcionados.

Sin embargo, la principal desventaja de este método es que la implementación es más compleja en comparación a las otras opciones presentadas en este artículo. Los pasos en los que el usuario ha de dar su consentimiento para acceder a la aplicación pueden agregar algo de tiempo a completar la solicitud. También requiere poner en manos de un servicio externo la autenticación en la aplicación. Por ello, si éste deja de proveer el servicio temporalmente, ningún usuario podrá acceder a la aplicación.

conclusiones

En este artículo se han presentado diversas formas de autenticación para proteger el acceso a datos sensibles en una API. No podemos decir qué método es mejor, ya que depende totalmente de cuál sea el contexto de la aplicación.

Por ejemplo, sería excesivo montar un servicio de autenticación OAuth 2.0 para una API que únicamente devuelva datos públicos sobre los distintos husos horarios en el mundo. Pero sí sería interesante aplicar una autenticación mediante API Key para que solo puedan obtener esta información unas personas contadas. Y tú ¿por cuál apuestas?

Elio San Martín – Software Developer at Itequia