Uso de Apache APISIX y Authing para implementar la gestión centralizada de autenticación

API7.ai

January 4, 2022

Ecosystem

Introducción

Acerca de Apache APISIX

Apache APISIX es una puerta de enlace API dinámica, en tiempo real y de alto rendimiento que ofrece funciones avanzadas de gestión de tráfico, como balanceo de carga, upstream dinámico, lanzamiento canario, fusión de servicios, autenticación, observabilidad, etc. Apache APISIX no solo admite cambios dinámicos de complementos y conexión en caliente, sino que también cuenta con una serie de complementos útiles. El complemento OpenID Connect para Apache APISIX, con soporte para el protocolo OpenID Connect, permite a los usuarios integrar Apache APISIX con los servicios de Authing y desplegarlo como una puerta de enlace de autenticación centralizada en la empresa.

Acerca de Authing

Authing es el primer producto de identidad en la nube centrado en desarrolladores en China, que integra todos los protocolos de identidad principales y ofrece servicios completos y seguros de autenticación de usuarios y gestión de acceso para empresas y desarrolladores. Con "API First" como base del producto, todas las funciones comunes en el ámbito de la identidad están encapsuladas de manera modular, y todas las capacidades se exponen a los desarrolladores a través de SDKs en múltiples lenguajes de programación. Al mismo tiempo, los usuarios pueden utilizar de manera flexible las API RESTful abiertas de Authing para ampliar funcionalidades y satisfacer las necesidades de gestión de identidades de diferentes empresas en diversos escenarios comerciales.

¿Qué es la Autenticación Centralizada?

Modo de Autenticación Tradicional

En el modo de autenticación tradicional, cada servicio de aplicación backend necesita desarrollar funciones separadas para admitir la autenticación, como interactuar con el proveedor de identidad y obtener la información de identidad del usuario.

flujo de trabajo de autenticación tradicional

Modo de Autenticación de Identidad Centralizada

A diferencia del modo de autenticación tradicional, el modo de autenticación centralizada saca la autenticación del usuario del servicio de aplicación. Tomando Apache APISIX como ejemplo, el proceso de autenticación centralizada se muestra en la figura anterior: primero, el usuario inicia una solicitud, luego la puerta de enlace frontal se encarga del proceso de autenticación del usuario, interactuando con el proveedor de identidad y enviando una solicitud de autorización al proveedor de identidad. El proveedor de identidad devuelve la información del usuario. Después de que la puerta de enlace completa la identificación del usuario, reenvía la información de identidad del usuario a la aplicación backend en forma de encabezado de solicitud.

flujo de trabajo del modo de autenticación centralizada

Ventajas del Modo de Autenticación de Identidad Centralizada

En comparación con el modo de autenticación tradicional, el modo de autenticación centralizada tiene las siguientes ventajas.

  1. Simplifica el proceso de desarrollo de aplicaciones, reduce la carga de trabajo de desarrollo y los costos de mantenimiento, y evita el desarrollo repetido de lógica de autenticación para cada aplicación.
  2. Mejora la seguridad del negocio, ya que el modo de autenticación centralizada en el nivel de la puerta de enlace puede interceptar solicitudes no autenticadas a tiempo para proteger las aplicaciones backend.

Al mismo tiempo, combinado con las potentes funciones de gestión de autenticación de Authing, se pueden lograr las siguientes funcionalidades.

  1. Gestión del ciclo de vida de los servicios de autenticación a través de la consola, incluyendo creación, habilitación, deshabilitación, etc.
  2. Monitoreo visual en tiempo real de la aplicación, incluyendo: número de solicitudes de interfaz, latencia de llamadas a la interfaz e información de errores de la interfaz, con notificaciones de alerta en tiempo real.
  3. Registro centralizado para ver fácilmente el inicio y cierre de sesión de los usuarios, así como información sobre ajustes y modificaciones en la aplicación.

Puedes encontrar más detalles en Authing Access Gateway.

Cómo implementar la Autenticación de Identidad Centralizada usando Apache APISIX y Authing

Paso 1: Configurar Authing

  1. Inicia sesión en tu cuenta de Authing, selecciona "Build your own app" y completa el nombre de la aplicación y la dirección de autenticación. Si no tienes una cuenta de Authing, visita Authing, haz clic en "Login/Register" en la esquina superior derecha para registrarte. Configurar Authing
  2. Haz clic en "Create" para crear una aplicación en Authing. Crear una aplicación en Authing
  3. Durante el proceso de autenticación, Authing rechazará URLs de callback que no estén configuradas. Dado que esto es una prueba local, la URL de callback de inicio de sesión y la URL de callback de cierre de sesión se configuran como la dirección de acceso de APISIX http://127.0.0.1:9080/. Configurar la URL de inicio y cierre de sesión
  4. Crear un usuario (opcional). En la página de lista de usuarios, crea un usuario con la cuenta y contraseña user1/user1, y puedes configurar si permitir el acceso a la aplicación en la página "User Information - Authorization Management" (por defecto está permitido). Crear Usuario
  5. Visita la página de la aplicación para la siguiente configuración, que es necesaria al configurar el complemento OpenID Connect de Apache APISIX.
    1. App ID: ID del cliente OAuth, es decir, el ID de la aplicación, correspondiente a client_id y {YOUR_CLIENT_ID} a continuación.
    2. App secret: Clave secreta del cliente OAuth, es decir, la clave de la aplicación. Corresponde a client_secret y {YOUR_CLIENT_SECRET} a continuación.
    3. Service_discovery_address: La dirección de descubrimiento del servicio de la aplicación. Corresponde a {YOUR_DISCOVERY} a continuación. configuraciones

Paso 2: Instalar Apache APISIX

Puedes instalar Apache APISIX de varias maneras, incluyendo paquetes de código fuente, Docker, Helm Chart, etc.

Instalar dependencias

El entorno de ejecución de Apache APISIX requiere dependencias de NGINX y etcd.

Antes de instalar Apache APISIX, instala las dependencias según el sistema operativo que estés utilizando. Proporcionamos instrucciones de instalación de dependencias para CentOS7, Fedora 31 y 32, Ubuntu 16.04 y 18.04, Debian 9 y 10, y macOS. Consulta Instalar Dependencias para más detalles.

Instalación mediante paquete RPM (CentOS 7)

Este método de instalación es adecuado para CentOS 7; ejecuta el siguiente comando para instalar Apache APISIX.

sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm

Instalación mediante Docker

Consulta Instalar Apache APISIX con Docker.

Instalación mediante Helm Chart

Consulta Instalar Apache APISIX con Helm Chart.

Instalación mediante paquete de código fuente

  1. Crea un directorio llamado apisix-2.7.
mkdir apisix-2.7
  1. Descarga el paquete de código fuente de Apache APISIX Release.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz

También puedes descargar el paquete de código fuente de Apache APISIX desde el sitio web oficial. La Página de Descargas de Apache APISIX también proporciona paquetes de código fuente para Apache APISIX, APISIX Dashboard y APISIX Ingress Controller.

  1. Descomprime el paquete de código fuente de Apache APISIX Release.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
  1. Instala las bibliotecas Lua necesarias para el entorno de ejecución.
# Cambia al directorio apisix-2.7
cd apisix-2.7
# Crea las dependencias
make deps

Inicializar Dependencias

Ejecuta el siguiente comando para inicializar el archivo de configuración de NGINX y etcd.

# inicializar el archivo de configuración de NGINX y etcd
make init

Paso 3: Iniciar Apache APISIX y configurar la ruta

  1. Ejecuta el siguiente comando para iniciar Apache APISIX.

    apisix start
    
  2. Crea rutas y configura el complemento OpenID Connect. La lista de configuración de OpenID Connect es la siguiente.

CampoValor por DefectoDescripción
client_idN/AID del cliente OAuth
client_secretN/AClave secreta del cliente OAuth
discoveryN/APuntos finales de descubrimiento de servicios para proveedores de identidad
scopeopenidAlcance de los recursos a los que se necesita acceder
relmapisixEspecifica la información de autenticación en el encabezado de respuesta WWW-Authenticate
bearer_onlyfalseSi se debe verificar el token en el encabezado de la solicitud
logout_path/logoutURI de cierre de sesión
redirect_urirequest_uriLa URI a la que el proveedor de identidad redirige, por defecto es la dirección de la solicitud
timeout3Tiempo de espera de la solicitud en segundos
ssl_verifyfalseSi se debe verificar el certificado SSL del proveedor de identidad
introspection_endpointN/ALa URL del punto final de autenticación de tokens del proveedor de identidad, que se extraerá de la respuesta de descubrimiento si se deja en blanco.
introspection_endpoint_auth_methodclient_secret_basicNombre del método de autenticación para la introspección de tokens
public_keyN/AClave pública para la autenticación de tokens
token_signing_alg_values_expectedN/AAlgoritmo para los tokens de autenticación
set_access_token_headertrueSi se debe incluir el token de acceso en el encabezado de la solicitud
access_token_in_authorization_headerfalseEl token de acceso se coloca en el encabezado Authorization cuando es true, y en el encabezado X-Access-Token cuando es false.
set_id_token_headerfalseNo incluir el token ID en el encabezado X-ID-Token de la solicitud
set_userinfo_headerfalseSi se debe incluir la información del usuario en el encabezado X-Userinfo de la solicitud

El siguiente ejemplo de código crea una ruta a través de la API de administración de Apache APISIX, configurando el upstream de la ruta a httpbin.org. httpbin.org es un servicio backend simple para recibir y responder solicitudes, la página get de httpbin.org se utilizará a continuación, consulta http bin get.

Para los elementos de configuración específicos, consulta Complemento OpenID Connect de Apache APISIX.

curl  -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
    "uri":"/*",
    "plugins":{
        "openid-connect":{
            "client_id":"{YOUR_CLIENT_ID}",
            "client_secret":"{YOUR_CLIENT_SECRET}",
            "discovery":"https://{YOUR_DISCOVERY}",
            "scope":"openid profile",
            "bearer_only":false,
            "realm":"apisix",
            "introspection_endpoint_auth_method":"client_secret_post",
            "redirect_uri":"http://127.0.0.1:9080/"
        }
    },
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "httpbin.org:80":1
        }
    }
}'

Paso 4: Acceder a Apache APISIX

  1. Visita "http://127.0.0.1:9080/get" y la página será redirigida a la página de inicio de sesión de Authing, ya que el complemento OpenID Connect ya está habilitado (esta página se puede personalizar en la consola de Authing en "Applications - Branding"). Acceder a Apache APISIX

  2. Ingresa la contraseña de la cuenta de usuario registrada en Authing, o el usuario user1/user1 creado en el Paso 1, y haz clic en "Login" para iniciar sesión en la cuenta de Authing.

  3. Después de un inicio de sesión exitoso, podrás acceder correctamente a la página get en httpbin.org. La página httpbin.org/get devolverá los datos de la solicitud de la siguiente manera.

    ...
    "X-Access-Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFqeU55aVdVd2NhbUFxdEdVRUNCeFNsTWxQSWtTR2N1NmkyZzhEUk1OSGsifQ.eyJqdGkiOiJjTy16a0pCS0NSRFlHR2kyWkJhY0oiLCJzdWIiOiI2MWM5OGFmOTg0MjI4YWU0OTYyMDU4NTIiLCJpYXQiOjE2NDA1OTg4NTgsImV4cCI6MTY0MTgwODQ1OCwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSIsImlzcyI6Imh0dHBzOi8vYXBpc2l4LmF1dGhpbmcuY24vb2lkYyIsImF1ZCI6IjYxYzk4M2M0YjI4NzdkNDg2OWRkOGFjYiJ9.l2V8vDWcCObB1LjIhKs2ARG4J7WuB-0c-bnYZG2GP2zcpl6PMAPcId2B76CaXCU58ajGcfRmOlWJ67UaHrfWKv8IM4vcYN1gwhKdokSyrhEM31gQE-MzNEsEbPaVIGXdpR1N2JnAJK5-tKIjopDAXSwArfO6fQKTpjLhCi3COIA169WGRR4CKCwNzzpFAYP2ilNc18D_HRTBLS6UjxZSNUtWE5dbx7uBjblhwIwn5e1fxiEQcknVK8Dxf8NUliFECvr02HX2hNvmuCECkvA_mZYlshAeqidK8tSEXirAWsWS5jlXFqLiBJkhSHFrbxRyqeOSfJCJR_YcCwk9AzgZGg",
    "X-Id-Token": "eyJhdF9oYXNoIjoiRl8tRjZaUVgtWVRDNEh0TldmcHJmUSIsImJpcnRoZGF0ZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdlbmRlciI6IlUiLCJnaXZlbl9uYW1lIjpudWxsLCJpc3MiOiJodHRwczpcL1wvYXBpc2l4LmF1dGhpbmcuY25cL29pZGMiLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oiLCJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwiaWF0IjoxNjQwNTk4ODU4LCJuaWNrbmFtZSI6bnVsbCwibm9uY2UiOiJmMTlmZjhjODM5NzdmZjNlMDczMzZmMzg3Y2QxM2EzMSIsIm1pZGRsZV9uYW1lIjpudWxsLCJleHAiOjE2NDE4MDg0NTgsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYXVkIjoiNjFjOTgzYzRiMjg3N2Q0ODY5ZGQ4YWNiIiwicHJvZmlsZSI6bnVsbH0=",
    "X-Userinfo": "eyJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwicHJvZmlsZSI6bnVsbCwibmlja25hbWUiOm51bGwsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJmYW1pbHlfbmFtZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImdpdmVuX25hbWUiOm51bGwsIm1pZGRsZV9uYW1lIjpudWxsLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oifQ=="
    ...
    

    X-Access-Token: Apache APISIX coloca el token de acceso obtenido del proveedor de identidad en el encabezado de solicitud X-Access-Token, opcionalmente en el encabezado Authorization mediante access_token_in_authorization_header en la configuración del complemento.

    X-Access-Token

    X-Id-Token: Apache APISIX coloca el token ID obtenido del proveedor de identidad en el encabezado de solicitud X-Id-Token después de codificarlo en base64, lo cual se puede habilitar o deshabilitar mediante set_id_token_header en la configuración del complemento.

    X-Id-Token

    X-Userinfo: Apache APISIX coloca la información del usuario obtenida del proveedor de identidad en X-Userinfo después de codificarla en base64. Puedes elegir si habilitar esta función mediante set_userinfo_header en la configuración del complemento.

    X-Userinfo

    Como puedes ver, Apache APISIX llevará los encabezados de solicitud X-Access-Token, X-Id-Token y X-Userinfo al upstream. El upstream puede analizar estos encabezados para obtener la información de ID del usuario y los metadatos del usuario.

  4. En "Audit Log - User Behavior Log" en la consola de Authing, puedes observar la información de inicio de sesión de user1. Información de Inicio de Sesión

Resumen

Este artículo describe los pasos detallados para integrar Apache APISIX con Authing.

Apache APISIX no solo se compromete a mantener su alto rendimiento, sino que también ha prestado gran atención a la construcción de un ecosistema de código abierto. Actualmente, Apache APISIX cuenta con más de 10 complementos relacionados con la autenticación y autorización que admiten la integración con los principales servicios de autenticación y autorización de la industria.

Si tienes la necesidad de integrarte con otras autoridades de autenticación, visita el GitHub de Apache APISIX y deja tus sugerencias a través de un issue; o suscríbete a la lista de correo de Apache APISIX para expresar tus ideas por correo electrónico.

Tags: