Claves API y su seguridad

Después de tanta discusión sobre las claves API y la credencial OAuth, en este artículo nos centraremos en cuál es mejor desde el punto de vista de la seguridad y la privacidad. Pero antes de continuar, primero recordemos qué significa Autenticación y Autorización

Autenticación significa validar su identidad mediante el uso de credenciales como identificación de usuario, nombre de usuario, contraseña. Se trata de determinar si usted es lo que dice que está usando las credenciales presentadas por usted. Un ejemplo más general es el formulario de inicio de sesión que encontramos en casi todos los sitios web. 

La autorización , por otro lado, tiene como objetivo determinar si está autorizado para acceder a los recursos o no. Después de que el sistema autentique su identidad, el siguiente paso es darle acceso a los recursos en función de su identidad. 

Por ejemplo, si tomamos ejemplo de una computadora portátil. Supongamos que hay 2 usuarios en una computadora portátil, uno es administrador y otro es ABC. ABC no está autorizado a eliminar un archivo. ABC solo puede crear un archivo, leer un archivo, modificar un archivo. 
Si un usuario ha ingresado credencial de Admin. El sistema primero comparará las credenciales con las de la base de datos para determinar qué usuario es este o, en un caso, si es un usuario legítimo o no. Después de autenticar las credenciales, el sistema sabe que es administrador, por lo que verá el conjunto de permisos para el administrador y otorgará solo los privilegios destinados al administrador. Al igual que el administrador, también puede eliminar un archivo. Pero si es el usuario ABC, entonces solo podrá crear un archivo, leer un archivo y modificar un archivo, no se permitirá la eliminación. Esto se conoce como Autorización. 

Después de analizar estas diferencias, podemos comprender fácilmente la diferencia entre la clave API y OAuth. Hay tres tipos de mecanismos de seguridad para una API: 
 

  1. Autenticación básica HTTP: en este mecanismo, el agente de usuario HTTP proporciona un nombre de usuario y una contraseña. Dado que este método depende solo del encabezado HTTP y los datos de autenticación completos se transmiten en líneas inseguras, por lo tanto, es propenso al ataque Man-In-The-Middle donde un usuario puede simplemente capturar el encabezado HTTP e iniciar sesión usando el encabezado copy-cat y un paquete malicioso. Debido al SSL obligatorio, este esquema es muy lento. La autenticación básica HTTP se puede usar en situaciones como la red interna donde la velocidad no es un problema.
  2. Claves API: las claves API entraron en escena debido a la baja velocidad y la naturaleza altamente vulnerable de la autenticación básica HTTP. La clave API es el código que se asigna al usuario al registrarse en la API o crear una cuenta. Las claves de API se generan utilizando el conjunto específico de reglas establecidas por las autoridades involucradas en el desarrollo de API. Este fragmento de código debe pasar cada vez que la entidad (desarrollador, usuario o un programa específico) realiza una llamada a la API. A pesar de su fácil uso y alta velocidad, son muy inseguros. 
      
    La pregunta sigue siendo, ¿POR QUÉ? 
    El problema es que la clave API es un método de autenticación, no de autorización. Son como nombre de usuario y contraseña, proporcionando así la entrada al sistema. En general, las claves API se colocan en los siguientes lugares: encabezado de autorización, autenticación básica, datos del cuerpo, encabezado personalizado, string de consulta. 

    En cualquier momento, mientras realizamos una solicitud, debemos enviar una clave API colocándola en cualquiera de los lugares anteriores. Por lo tanto, si en algún momento la red se ve comprometida, toda la red queda expuesta y la clave API se puede extraer fácilmente. 
    Una vez que se roba una clave API, se puede usar por un período de tiempo indefinido. A menos y hasta que el propietario del proyecto revoque la clave API y genere una nueva.

  3. OAuth: OAuth no es solo un método de autenticación o autorización, sino que también es una combinación de ambos métodos. Cada vez que se llama a una API con la credencial OAuth, el usuario inicia sesión en el sistema y genera un token. Recuerde que este token está activo solo durante una sesión, luego de lo cual el usuario debe generar un nuevo token iniciando sesión nuevamente en el sistema. Después de enviar este token al servidor, el usuario está autorizado para los roles según las credenciales. 
    Ahora, si toma un ejemplo de la API de datos de Youtube, primero el usuario se autenticará enviando credenciales como nombre de usuario y contraseña y luego enviará el token generado al servidor y se autorizará para el rol. 

    Las imágenes a continuación muestran cómo funciona la Credencial OAuth: 
     

  1. Después de un inicio de sesión exitoso, se genera un token. Este token, cuando se presenta al servidor, decide los derechos apropiados para el usuario que llama y genera los resultados correspondientes. La parte resaltada de la imagen representa el token de autorización que se generó. 
     

  1.  

Referencias: 
 

  1. https://nordicapis.com/3-common-methods-api-authentication-explained/
  2. https://zapier.com/engineering/apikey-oauth-jwt/
  3. https://apifriends.com/api-security/api-keys-oauth/
  4. https://cloud.google.com/endpoints/docs/openapi/when-why-api-key
  5. https://nordicapis.com/por-que-las-claves-api-no-son-suficientes/

Publicación traducida automáticamente

Artículo escrito por rashi_garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *