Gráfico de blog técnico que representa métodos de autenticación de API comunes y flujos de trabajo de concesión OAuth2 seguros.

Métodos comunes de autenticación de API REST explicados

3 Minuto de lectura

 

Al implementar la automatización y la orquestación, es fundamental comprender cómo funciona la autenticación con las API. Es probable que la mayoría de los productos de su entorno cuenten con algún tipo de mecanismo de autenticación. Para automatizar las comunicaciones con dichas API, es necesario conocer los matices y las diferencias entre los distintos métodos de autenticación. En esta entrada de blog, mi objetivo es ayudarle a comprenderlo desglosando tres métodos diferentes de autenticación de API.

Autenticación de nombre de usuario y contraseña

Uno de los métodos de autenticación más comunes que utilizan las API REST es la autenticación con nombre de usuario y contraseña. Existen varios tipos que utilizan nombre de usuario y contraseña, pero el más común es la autenticación HTTP básica. Es sencilla si tienes experiencia con API, pero puede resultar difícil para principiantes comprender su funcionamiento y uso.

Por RFC2617, Para realizar una solicitud HTTP con autenticación básica, se requiere una cadena codificada en base64 que consta de un nombre de usuario y una contraseña, más dos puntos. Una vez hecho esto, se antepone la cadena "Basic" y un espacio. Para mayor claridad, veamos el siguiente ejemplo:

Nombre de usuario: first.last

Contraseña: my5uper5ecretP@ssw0rd

Imagina que tienes un nombre de usuario y una contraseña como en el ejemplo anterior. Para usarlos en una solicitud HTTP a una API, primero debes combinarlos con dos puntos:

nombre.apellido:my5uper5ecretP@ssw0rd

Una vez hecho esto, es necesario codificarlos en base64. En Python, se podría hacer lo siguiente:

importar base64
cadena_de_autenticación = base64.b64encode(b':'.join(('nombre.apellido'.encode('latin1'), 'my5uper5ecretP@ssw0rd'.encode('latin1')))).strip()

Si imprime nuestra variable auth_string recibirá el siguiente valor:

b'Zmlyc3QubGFzdDpteTV1cGVyNWVjcmV0UEBzc3cwcmQ='’

Ahora que tiene esta cadena codificada, anteponga la cadena del método de autenticación (que es Basic) a esta variable. La cadena completa de la variable debería ser como sigue:

Básico Zmlyc3QubGFzdDpteTV1cGVyNWVjcmV0UEBzc3cwcmQ=

Una vez creada esta cadena, se añade a un encabezado HTTP específico en tu solicitud HTTP. Este encabezado es especial y se utiliza para la autenticación. Por si no lo has adivinado, se llama "Autorización". Útil, ¿verdad?

A continuación se muestra un ejemplo de comando cURL que utiliza autenticación básica:

AUTH=$(echo -ne "USUARIO DE AUTENTICACIÓN $BASIC: CONTRASEÑA DE AUTENTICACIÓN $BASIC" | base64 --wrap 0) curl \ --header "Tipo de contenido: aplicación/json" \ --header "Autorización: Autorización básica $AUTH" \ --request POST \ --data '{"clave1":"valor1", "clave2":"valor2"}' \ https://ejemplo.com/

Autenticación JWT

La autenticación JWT (JSON Web Token) es una forma común de autenticación de token basada en RFC 7519. La autenticación JWT consta de tres partes principales: encabezado, carga útil y firma. Cada una de estas partes está codificada en base64 y se envía junto con una solicitud HTTP para la autenticación.

Un conjunto de notificaciones JWT se compone de una o más notificaciones especificadas en un objeto JSON. Cada notificación de un conjunto tiene una clave única y un valor correspondiente. Por ejemplo, la estructura típica de un conjunto de notificaciones JWT es:

{ “iss”: “josh”, “exp”: 1617221146, “https://api.mycompany.com/some...”: verdadero }

Cada clave y valor deben ser únicos y se consideran una reclamación individual dentro del conjunto de reclamaciones. Cada una de estas claves especificadas es arbitraria y no está exigida por el estándar RFC. Esto significa que la estructura del conjunto de reclamaciones en la autenticación JWT depende de la API o el servicio con el que se esté trabajando.

Al igual que los valores de Encabezado y Firma, una vez definida la reclamación JWT (carga útil), esta se codifica en base64. Puede probar estos valores en https://jwt.io también.

Autenticación OAuth2

La autenticación OAuth2 se está volviendo extremadamente popular por el simple hecho de que admite diversas formas (flujos) de autenticarse en los mismos puntos finales. Esto ayuda a los desarrolladores a crear servicios robustos que permiten la autorización en diferentes situaciones, como la autenticación como aplicación web, aplicación de escritorio, dispositivo móvil, etc., con solo cambiar algunos detalles, en lugar de tener que usar un mecanismo de autenticación completamente diferente para cada caso.

Para ayudar a comprender los conceptos de la autenticación OAuth2, creé este diagrama que muestra los cuatro componentes principales:

  1. Un usuario o sistema que necesita acceso

  2. Un servidor que es responsable de la autorización

  3. Una aplicación a la que se le concede acceso a través del servidor de autorización

  4. Esa aplicación luego accede a los datos basándose en esa autorización.

Diagrama de autenticación OAuth2

Si desea obtener más información sobre OAuth2, consulte la serie de tres partes que escribí para explicar OAuth2 con más detalle aquí:

Al analizar los tipos de autenticación, OAuth2 y JWT son más seguros que Basic y probablemente los encontrará al usar API, especialmente al trabajar con productos como EDR, SIEM, etc.

Hay muchos otros tipos de autenticación de API REST, así como variaciones de los métodos enumerados anteriormente, pero espero que esto le haya ayudado a comprender los tres métodos de autenticación más comunes utilizados por las API.

Solicitar una demostración en vivo