Seguridad en las APIs

La seguridad es un factor muy importante y crítico que implica proteger la integridad de los datos. Una API dañada o pirateada puede exponer datos médicos, personales,  financieros, etc  al público. Aunque también es cierto que no todos los datos son iguales, y por tanto no deben protegerse de la misma manera, ya que dependerá principalmente en los tipos de datos que se estén tratando.

Dicho lo anterior, se debe encontrar un equilibrio entre la seguridad y la usabilidad de las APIs, algo muy complejo evita a usuarios con malas intenciones pero también dificulta su uso por usuario legítimos. El uso de estándares ayuda a conseguir este equilibrio, ya que son suficientemente complejos como para disuadir a usuarios o aplicaciones maliciosas y, proporcionando la información correcta, permiten el acceso a usuarios normales mediante autorización.

Habitualmente cuando se habla de seguridad y APIs aparece Oauth como la opción principal, en parte porque es el método más extendido y recomendado para la mayoría de los casos, aunque existen otros métodos que puede ser más apropiado para ciertos casos. A continuación veremos los métodos que pueden utilizarse:

API Key

Es un identificador que se asigna para consumir una API. Su valor es único y utilizado para cada una de las solicitudes.

Ventajas

La sencillez de su uso y la autonomía, ya que la clave es independiente del servidor de nombres y credenciales.

Desventajas

  • La delegación de la responsabilidad del almacenamiento de la clave, ya que la seguridad del sistema reside en la capacidad del consumidor para proteger sus claves y el uso correcto de las mismas.

  • La falta del control granular, es decir, no hay manera de limitar el acceso a ciertos recursos o APIs mediante esta API Key.

  • La clave no caduca con el tiempo. Es necesario implementar  algún sistema de rotado de claves que minimice este problema.

  • El uso incorrecto de esta clave, ya que por su naturaleza no es una solución completa de seguridad, fue pensada como método de identificación, no como un método seguro de autorización.

Casos de uso

Los casos de uso donde este método sería una opción a considerar son aquellos con comunicaciones de tipo servidor-servidor alojados dentro de infraestructura de la propia organización y, si es posible, solo para funcionalidades consultivas.

 

Oauth 2.0

Es un estándar abierto para la autorización que permite controlar el acceso por parte de las aplicaciones a los datos sin tener que compartir la identidad

Ventajas

  • Es un protocolo muy flexible que se basa en SSL que cifra las conexiones y permite manejar el access token de forma segura.

  • El acceso es limitado, tanto en tiempo (token) como en funcionalidad (scopes).

  • Permite compartir datos sin tener que revelar información personal.

  • Existen multitud de herramientas y SDKs que permiten su uso por parte de los desarrolladores

Casos de uso

Es la opción de securización de APIs por defecto en la mayoría de los casos y es necesario definir en función de la aplicación y datos expuestos qué tipo de flujo de autorización es necesario para proporcionar el token de acceso a los datos por parte de la aplicación.

 

OpenId Connect

OpenID Connect es una extensión de OAuth que contiene por defecto todas las ventajas de OAuth citadas anteriormente además de otras que vemos a continuación.

Ventajas

  • Permitir a las aplicaciones autenticar usuarios sin tener que almacenar y administrar contraseñas.

  • Administrar su propia instancia OAuth que permita el acceso a los recursos.

  • Usar un proveedor externo de identidades para autenticar a los usuarios como Google, Facebook, etc.

Casos de uso

El principal caso de uso de este tipo de seguridad es proporcionar a los usuarios la posibilidad de autenticarse a través de diferentes proveedores de identidades (IDPs).