• logto
  • api
  • proteccion
  • JWT
  • autorizacion

Métodos de autorización de API

En este artículo, exploraremos tres mecanismos comunes de autorización de API: claves de API, autenticación básica y tokens OAuth JWT. Al final, también hablaremos sobre cómo Logto puede ayudarte a proteger tus APIs utilizando tokens OAuth JWT.

Simeng
Simeng
Developer

Introducción

En el mundo actual, las APIs son la columna vertebral de las aplicaciones modernas. Son la forma principal de acceder a datos y funcionalidades de servicios backend. Las APIs permiten que diferentes sistemas de software de diferentes partes se comuniquen y compartan datos entre sí, lo que las hace indispensables para los negocios. Sin embargo, las APIs también son un objetivo común para los atacantes. La necesidad de protección de API es más fuerte que antes.

La protección de API es el proceso de asegurar que las APIs estén protegidas contra accesos no autorizados, mal uso y ataques. Es un componente crítico de cualquier estrategia de API. En este artículo, exploraremos tres mecanismos comunes de protección de API: claves de API, autenticación básica y tokens OAuth JWT. Al final, también mostraremos cómo Logto protege tus APIs usando los tokens OAuth JWT.

Claves de API

La clave de API es el método más sencillo y ampliamente utilizado para asegurar APIs. Una clave de API es una cadena larga de caracteres generada por el proveedor de API y compartida con usuarios autorizados. Esta clave debe incluirse en el encabezado de la solicitud al acceder a la API. Las claves de API son simples y efectivas para necesidades básicas de seguridad. Por ejemplo, servicios populares como Google Maps API y AWS proporcionan claves de API para controlar el acceso y monitorear el uso. Sin embargo, tienen limitaciones en términos de seguridad. A menudo se utilizan para la comunicación entre máquinas.

e.g.

Pros:

  • Simple de implementar: Las claves de API son fáciles de implementar y utilizar. Involucran adjuntar una clave al encabezado de la solicitud, lo que las convierte en un método sencillo que los desarrolladores y los clientes pueden entender y emplear.
  • Fácil de monitorear: Las claves de API son fáciles de monitorear. Puedes rastrear el uso de cada clave y revocarlas si es necesario.
  • Efectivo para limitar la tasa: Las claves de API son efectivas para limitar la tasa. Puedes establecer un límite en el número de solicitudes por clave para prevenir abusos.
  • Adecuado para datos no sensibles: Las claves de API son adecuadas para datos no sensibles o APIs disponibles públicamente, donde los requisitos de seguridad son menores.

Contras:

  • Seguridad limitada: Las claves de API no son lo suficientemente seguras para datos sensibles, especialmente para aplicaciones del lado del cliente. A menudo se utilizan en comunicaciones entre máquinas.
  • No adecuado para la autenticación de usuarios: Las claves de API están vinculadas a aplicaciones o sistemas, no a usuarios individuales, lo que dificulta identificar usuarios específicos o rastrear sus acciones.
  • Sin expiración del token: Las claves de API son típicamente estáticas y no expiran. Si una clave se ve comprometida, podría ser mal utilizada indefinidamente a menos que se regenere manualmente.

Autenticación básica

La autenticación básica es otro método común para asegurar APIs. Es un esquema de autenticación simple integrado en el protocolo HTTP. Implica el envío de un nombre de usuario y una contraseña en el encabezado de la solicitud. El servidor verifica las credenciales y devuelve el recurso solicitado si son válidas. Por ejemplo, muchas aplicaciones web y APIs RESTful utilizan la autenticación básica como una forma rápida y fácil de autenticar a los usuarios. La autenticación básica es más segura que las claves de API porque utiliza un nombre de usuario y una contraseña en lugar de una clave estática. Sin embargo, aún no es lo suficientemente segura para datos sensibles, ya que las credenciales del cliente se transmiten en texto plano y son susceptibles a la interceptación. La autenticación básica es adecuada para sistemas internos donde la conexión de red es segura, e.g. comunicación entre máquinas.

e.g.

o

Pros:

  • Mayor seguridad: La autenticación básica es más segura que las claves de API porque utiliza un nombre de usuario y una contraseña en lugar de una clave estática.
  • Ampliamente compatible: La autenticación básica es ampliamente adoptada y compatible con la mayoría de los servidores web y navegadores.
  • Simplicidad: Al igual que las claves de API, la autenticación básica es relativamente simple de configurar y utilizar.

Contras:

  • Exposición de credenciales: La autenticación básica envía credenciales en texto plano, lo que las hace susceptibles a la interceptación si no se utiliza una conexión segura (HTTPS).
  • Sin expiración del token: La autenticación básica no admite la expiración de tokens. Si un token se ve comprometido, podría ser mal utilizado indefinidamente a menos que se regenere manualmente.

Tokens OAuth JWT

JSON Web Token (JWT), definido por RFC 7519, es un estándar abierto para la transmisión segura de información entre partes como un objeto JSON. Comúnmente se utiliza para la autenticación y autorización en aplicaciones web y APIs.

Un JWT firmado tiene el siguiente formato:

Consiste en tres partes separadas por . : la cabecera, la carga y la firma.

Aquí hay un ejemplo de un JWT:

  • cabecera: contiene información sobre el tipo de token y el algoritmo de hash utilizado para firmarlo.
  • carga: contiene las reclamaciones (declaraciones) sobre el usuario y otros datos.
  • firma: es un hash de la cabecera y la carga, firmado con una clave secreta.

OAuth es un estándar abierto integral para asegurar APIs y para la delegación de acceso, utilizado comúnmente como una forma de que los usuarios del cliente otorguen a sitios web o aplicaciones acceso a su información en otros sitios web sin darles las contraseñas.

Cuando se utilizan junto con JWT, los tokens OAuth JWT ofrecen una solución de seguridad robusta. En lugar de transmitir información sensible como nombres de usuario y contraseñas con cada solicitud, los tokens OAuth JWT se emiten a clientes autorizados tras una autenticación exitosa. Estos tokens contienen información sobre el usuario y sus permisos. Además, los tokens JWT están firmados digitalmente para evitar manipulaciones y pueden expirar, lo que proporciona una capa adicional de seguridad.

Uno de los principales beneficios de los tokens OAuth JWT es su flexibilidad. Pueden ser utilizados para varios tipos de aplicaciones, incluidas aplicaciones web y móviles, soluciones de inicio de sesión único y más. Por ejemplo, grandes plataformas de redes sociales como Facebook, Twitter y LinkedIn utilizan tokens OAuth JWT para autenticar usuarios y permitir que aplicaciones de terceros accedan de manera segura a los datos del usuario.

Pros:

  • Seguridad mejorada: Los tokens OAuth JWT proporcionan un nivel más alto de seguridad. Están firmados digitalmente y pueden ser encriptados, lo que reduce el riesgo de acceso no autorizado y manipulación de datos.
  • Identidad del usuario y control de acceso: Los tokens JWT pueden transportar información de identidad del usuario e incluir reclamaciones que especifican qué acciones o recursos un usuario está autorizado a acceder.
  • Control de acceso granular: Los tokens JWT pueden usarse para implementar control de acceso granular. Por ejemplo, puedes especificar qué recursos un usuario puede acceder y qué acciones puede realizar en esos recursos.
  • Expiración del token: Los tokens OAuth JWT pueden configurarse para expirar después de un cierto período de tiempo, reduciendo el riesgo de mal uso.

Contras:

  • Complejidad: Los tokens OAuth JWT son más complejos que las claves de API y la autenticación básica. Requieren pasos adicionales para configurarse y usarse.
  • Gestión de tokens: Los tokens OAuth JWT necesitan ser gestionados y revocados si es necesario. Esto puede ser un desafío para aplicaciones a gran escala con muchos usuarios y clientes.
  • Consumo de recursos: Generar y validar tokens puede tener algo de sobrecarga de rendimiento, lo que puede ser una preocupación en escenarios de alto tráfico.

Protección de API con Logto

La elección del método de autenticación depende de los requisitos específicos y consideraciones de seguridad de tu aplicación. Las claves de API son simples pero menos seguras, la autenticación básica ofrece más seguridad pero carece de características de identidad de usuario, mientras que los tokens OAuth JWT proporcionan una robusta seguridad y capacidades de identidad de usuario, pero aumentan la complejidad en la implementación y gestión.

Logto proporciona una forma simple y segura de proteger tu API utilizando tokens OAuth JWT. Soporta tanto los estándares OAuth 2.0 como OpenID Connect (OIDC), permitiéndote elegir el método de autenticación que mejor se ajuste a tus necesidades. Puedes usar el flujo client_credentials para comunicación entre máquinas y el flujo authorization_code para aplicaciones web.

Comunicación entre máquinas

Logto utiliza el flujo client_credentials para las aplicaciones del tipo comunicación entre máquinas. Este flujo es adecuado para la comunicación de servidores backend, donde el cliente es un cliente confidencial que puede almacenar de manera segura las credenciales del cliente. También se conoce como el "OAuth de dos patas" porque no involucra a un usuario. Las credenciales del cliente se utilizan directamente como un permiso de autorización para obtener un token de acceso.

El flujo de integración es simple y directo:

  1. Crea un recurso de API en Logto Console.
  2. Crea un cliente de comunicación entre máquinas en Logto Console.
  3. Envía una solicitud al endpoint de token de Logto para obtener un token de acceso.
  1. Accede al recurso protegido con el token de acceso.

Por favor revisa nuestra documentación sobre integración máquina a máquina para más detalles.

Aplicaciones web

Para clientes públicos como aplicaciones web, Logto utiliza el flujo authorization_code para autenticar usuarios. Este flujo es adecuado para aplicaciones web donde el cliente es un cliente público que no puede almacenar de manera segura las credenciales del cliente. También se conoce como el "OAuth de tres patas" porque involucra a un usuario. El usuario es redirigido al servidor de autorización para autenticar y autorizar al cliente. Luego, el cliente utiliza el código de autorización para obtener un token de acceso.

El flujo de integración es ligeramente más complicado que el flujo de comunicación entre máquinas:

Por favor revisa nuestro artículo Protege tu API de Express.js con JWT y Logto como un ejemplo completo de cómo integrar Logto con React y acceder a tus APIs del servidor Express utilizando tokens JWT.