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).