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:
- API Connectivity Manager instalado y configurado en su entorno
- Una cuenta activa de Microsoft Azure account
- Un cliente REST (Postman se utiliza en este tutorial)
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.

Figura 1: Página de inicio del portal de Azure AD
Haz clic en el botón «Nuevo registro».

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.

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.

Figura 4: Exponer una API
Haga clic en «Agregar 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.

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.

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

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

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

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.

Figura 11: Nuevo secreto de cliente
Asigne un nombre al secreto y mantenga el tiempo de expiración predeterminado.

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.

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.

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

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

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.

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.

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.

Figura 19: 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.

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

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»

Figura 23: solicitud 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».

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.

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.
Sobre el autor
Artículos relacionados del blog
Ú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
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
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
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 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 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.