Acceso seguro a API con NGINX y Azure Active Directory

NGINX | 06 de octubre de 2022

Las API desempeñan un papel fundamental en la conectividad de las aplicaciones, pero también son vulnerables a los ataques. Antes, con las aplicaciones monolíticas, solo había un punto de entrada que proteger. En las arquitecturas de microservicios, una sola aplicación suele constar de numerosos microservicios conectados mediante API, y cada una de esas API puede tener cientos de endpoints. Esto hace que la superficie de ataque potencial de las API sea enorme, ya que cada nueva API crea un punto de entrada en el perímetro de seguridad.

Existen muchas estrategias para proteger sus API. Una de las más importantes es el control de acceso. En pocas palabras, debe verificar la identidad del usuario (autenticación o AuthN) y confirmar que puede acceder a determinados recursos (autorización o AuthZ). La implementación de OpenID Connect (OIDC) es uno de los métodos de control de acceso más habituales para las API. Puede ponerlo en marcha en cuestión de minutos con API Connectivity Manager, que forma parte de F5 NGINX Management Suite.

En este tutorial, aprenderá a llevar a cabo la parte de autorización del flujo de trabajo de OIDC configurando la validación de tokens web JSON (JWT) con API Connectivity Manager y Azure Active Directory (Azure AD).

¿Qué es OpenID Connect?

OpenID Connect (OIDC) es un protocolo de identidad basado en el protocolo OAuth 2.0. OIDC permite a los clientes verificar la identidad del usuario final o del dispositivo. Esto forma parte del control de acceso, que incluye tanto la autenticación como la autorización:

  • Autenticación verifica que un usuario o dispositivo sea quien dice ser
  • Autorización determina a qué puede acceder un usuario o dispositivo verificado

Existen muchas implementaciones diferentes de OIDC, entre ellas Azure AD, que utilizará en este tutorial. Como alternativa, puede utilizar otras soluciones de OIDC, como F5 BIG-IP Access Policy Manager (APM), Okta, Auth0, Ping Identity y muchas más, con API Connectivity Manager.

Qué necesita para empezar

Asegúrate de cumplir los siguientes requisitos previos:

Puedes registrarte para obtener una prueba gratuita de 30 días de NGINX Management Suite si necesitas acceder a API Connectivity Manager.

Crear una aplicación de Azure AD

Abre un navegador e inicia sesión en tu portal de Azure.

Haz clic en «Registros de aplicaciones» en el menú de la izquierda.

Página de inicio del portal de Azure AD

Figura 1: Página de inicio del portal de Azure AD

Haz clic en el botón «Nuevo registro».

Registro de aplicaciones de Azure AD

Figura 2: Registro de aplicaciones de Azure AD

Para crear una nueva aplicación, indique un nombre, un URI de redirección y haga clic en el botón Registrar. En esta demostración, utilizará Postman, por lo que usará el URI de redirección OIDC de Postman.

Crear una nueva aplicación de Azure AD

Figura 3: Crear una nueva aplicación de Azure AD

Ahora que ha creado la aplicación, debe crear ámbitos de OAuth para proporcionar acceso a la API. Haga clic en el enlace «Exponer una API» del menú de la izquierda.

Exponer una API

Figura 4: Exponer una API

Haga clic en «Agregar un ámbito».

Añadir un ámbito

Figura 5: Añadir un ámbito

Acepte el URI de identificador de aplicación predeterminado o cree uno propio y haga clic en el botón Guardar y continuar. Si desea crear su propio URI de identificador de aplicación, debe registrar el dominio que quiera usar en Azure AD.

URL del identificador de la aplicación

Figura 6: URL del ID de la aplicación

Para esta demostración, el ámbito se basa en un ejemplo de Microsoft. Rellene el formulario con la siguiente información y, a continuación, haga clic en el botón «Agregar ámbito»:

Nombre del ámbito: Employees.Read.All
¿Quién puede dar su consentimiento?: Administradores y usuarios
Nombre para mostrar del consentimiento del administrador: Acceso de solo lectura a los registros de empleados
Descripción del consentimiento del administrador: Permitir el acceso de solo lectura a todos los datos de los empleados.
Nombre para mostrar del consentimiento del usuario: Acceso de solo lectura a tus registros de empleado
Descripción del consentimiento del usuario: Permitir el acceso de solo lectura a tus datos de empleado.

Agregar un ámbito

Figura 7: Añadir un ámbito

A continuación, debes autorizar la aplicación cliente. Para ello, obtén el ID de cliente. Haz clic en el enlace «Información general» del menú de la izquierda y copia el «Id. de aplicación (cliente)».

Id. de cliente de la aplicación

Figura 8: ID de cliente de la aplicación

Vuelva a hacer clic en el enlace «Exponer una API» y, a continuación, haga clic en el botón «Agregar una aplicación cliente».

Agregar una aplicación cliente

Figura 9: Añadir una aplicación cliente

Pegue el ID de cliente de la aplicación en el campo ID de cliente y marque la casilla situada junto al URI del ID de la aplicación. A continuación, haga clic en el botón «Agregar aplicación».

Añadir una aplicación cliente

Figura 10: Añadir una aplicación cliente

A continuación, para esta demostración, utilizará un código de autorización con el flujo de código de autorización, por lo que necesitará un secreto de cliente para Postman. Haga clic en el enlace Certificados y secretos del menú de la izquierda y, a continuación, haga clic en el botón Nuevo secreto de cliente.

Nuevo secreto de cliente

Figura 11: Nuevo secreto de cliente

Asigne un nombre al secreto y mantenga el tiempo de expiración predeterminado.

Nombre del secreto

Figura 12: Nombre secreto

A continuación, copia tu secreto de cliente y guárdalo en un gestor de contraseñas para poder utilizarlo más adelante.

Secreto de cliente

Figura 13: Secreto de cliente

Configurar la aserción JWT en API Connectivity Manager

Ahora que ha configurado su aplicación de Azure AD, puede configurar el clúster de la puerta de enlace de API en API Connectivity Manager para que realice la aserción de tokens web JSON para el servicio definido. Para este paso, deberá determinar el URI de los conjuntos de claves web JSON (JWK) de su inquilino de Azure AD.

Puede obtener el URI de JWKS en el punto de conexión conocido del inquilino de Azure AD:
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration

Esta página proporcionará una carga útil JSON que contiene la clave jwks_uri. Deberá copiar su valor.

Punto de conexión conocido del inquilino de Azure AD

Figura 14: Punto de conexión conocido del inquilino de Azure AD

Ahora que ya tiene el URI de JWKS, abra la consola de API Connectivity Manager y vaya a la configuración del proxy de servicio. Haga clic en «Añadir política» para la política «Aserción de token web JSON».

Políticas del proxy de servicio de Gateway

Figura 15: Políticas de proxy del servicio de puerta de enlace

A continuación, pegue el URI de JKWS de su inquilino de Azure AD en el campo «Ubicación del URI» y, después, haga clic en el botón «Añadir».

Política de aserción de JSON Web Token

Figura 16: Política de aserción de JSON Web Token

Haga clic en Guardar y publicar para implementar esta política en el clúster de su puerta de enlace de API.

Política de la puerta de enlace de servicios

Figura 17: Política de puerta de enlace de servicios

¡Eso es todo! La instancia de API Connectivity Manager ya está configurada para realizar la aserción JWT en la puerta de enlace de servicios configurada.

Pruebas con Postman

Ahora es el momento de probar la configuración y asegurarse de que funciona según lo previsto. Para empezar, deberá obtener algunos datos de su aplicación de Azure AD:

  • Secreto de cliente de la aplicación (lo guardó anteriormente)
  • Ámbito de OAuth
  • Punto de conexión de autorización OAuth
  • Punto de conexión de tokens OAuth

Para obtener el ámbito de OAuth, abra el portal de Azure y vuelva a la página de registro de la aplicación. A continuación, haga clic en el enlace «Exponer una API» del menú de la izquierda y, después, en el icono «Copiar» correspondiente al ámbito. Guarde este valor, ya que lo utilizará dentro de unos minutos.

Ámbitos de la API

Figura 18: Ámbitos de la API

Para obtener los puntos de conexión de autorización y de token de OAuth, haga clic en el enlace «Información general» del menú de la izquierda y, a continuación, haga clic en el botón «Puntos de conexión». Después, copie los URI de los puntos de conexión de autorización y de token.

Puntos de conexión de la aplicación de Azure AD

Figura 19: Puntos de conexión de la aplicación de Azure AD

URL de los puntos de conexión de la aplicación de Azure AD

Figura 20: URL de los puntos de conexión de la aplicación de Azure AD

Abre Postman y haz clic en el menú Entornos. A continuación, haz clic en el enlace Crear entorno.

Crear un entorno en Postman

Figura 21: Crear un entorno en Postman

Asigne un nombre al entorno y añada seis variables con los valores (guardados en los pasos anteriores) en la columna «Valor inicial» y en la columna «Valor actual». A continuación, haga clic en el botón «Guardar».

  • client_id: ID de cliente de la aplicación de Azure AD
  • client_secret:secreto de cliente de la aplicación de Azure AD
  • auth_url: URL de autorización OAuth del inquilino de Azure AD
  • token_url: URL del token OAuth del inquilino de Azure AD
  • tenant_id: ID del directorio (inquilino) de Azure AD
  • scope: ámbito de la API de la aplicación de Azure AD con la URL del identificador de la aplicación

Variables de entorno de Postman

Figura 22: Variables de entorno de Postman

Abre una pestaña nueva en Postman y sigue estos pasos:

  • Cambia el entorno a ACM en la esquina superior derecha
  • Añade la URL de tu API a la barra de direcciones
  • Haz clic en la pestaña «Autenticación»
  • Cambia el Tipo a OAuth 2.0
  • Desplázate hacia abajo en la configuración de autenticación y establece las siguientes variables:
  • URL de autenticación: {{auth_url}}
  • URL del token de acceso: {{token_url}}
  • ID de cliente: {{client_id}}
  • Secreto del cliente: {{client_secret}}
  • Haz clic en el botón «Obtener un nuevo token de acceso»

Solicitud de Postman

Figura 23: solicitud de Postman

Configuración de autenticación de Postman

Figura 24: Configuración de autenticación de Postman

Se abrirá una ventana del navegador y se le pedirá que inicie sesión con sus credenciales de Azure AD. Una vez que se haya autenticado correctamente, se le redirigirá de nuevo a Postman y aparecerá la siguiente ventana. Haga clic en el botón «Usar token».

Botón «Use Token» de Postman

Figura 25: Uso del token en Postman

Ahora que ya tiene su token de acceso OAuth, por fin puede realizar la llamada a la API. Haga clic en el botón «Guardar» y, a continuación, en el botón «Enviar».

Si todo está configurado correctamente, debería ver una respuesta 200 OK.

Solicitud realizada correctamente en Postman

Figura 26: Solicitud correcta en Postman

Conclusión

Ahora tiene API Connectivity Manager protegiendo sus API mediante tokens de acceso OAuth de Azure AD. Los siguientes pasos serían añadir ámbitos de OAuth adicionales y configurar el clúster de la puerta de enlace de API en API Connectivity Manager para que transfiera esos ámbitos a sus API protegidas, pero ese es un tema para otra publicación.

Empieza hoy mismo

Inicie una prueba gratuita de 30 días de NGINX Management Suite, que incluye API Connectivity Manager e Instance Manager.

Una versión de este artículo se publicó originalmente en codygreen.com. Se ha editado y reproducido aquí con el permiso del autor.


Compartir
Etiquetas: F5 NGINX, Tech

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.