Uso de Apache APISIX y Authing para implementar la gestión centralizada de autenticación
API7.ai
January 4, 2022
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.
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.
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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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.
- Haz clic en "Create" para crear una aplicación en Authing.
- 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/.
- 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).
- 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.
- 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. - 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. - Service_discovery_address: La dirección de descubrimiento del servicio de la aplicación. Corresponde a
{YOUR_DISCOVERY}
a continuación.
- App ID: ID del cliente OAuth, es decir, el ID de la aplicación, correspondiente a
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
- Crea un directorio llamado
apisix-2.7
.
mkdir apisix-2.7
- 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.
- Descomprime el paquete de código fuente de Apache APISIX Release.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
- 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
-
Ejecuta el siguiente comando para iniciar Apache APISIX.
apisix start
-
Crea rutas y configura el complemento OpenID Connect. La lista de configuración de OpenID Connect es la siguiente.
Campo | Valor por Defecto | Descripción |
---|---|---|
client_id | N/A | ID del cliente OAuth |
client_secret | N/A | Clave secreta del cliente OAuth |
discovery | N/A | Puntos finales de descubrimiento de servicios para proveedores de identidad |
scope | openid | Alcance de los recursos a los que se necesita acceder |
relm | apisix | Especifica la información de autenticación en el encabezado de respuesta WWW-Authenticate |
bearer_only | false | Si se debe verificar el token en el encabezado de la solicitud |
logout_path | /logout | URI de cierre de sesión |
redirect_uri | request_uri | La URI a la que el proveedor de identidad redirige, por defecto es la dirección de la solicitud |
timeout | 3 | Tiempo de espera de la solicitud en segundos |
ssl_verify | false | Si se debe verificar el certificado SSL del proveedor de identidad |
introspection_endpoint | N/A | La 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_method | client_secret_basic | Nombre del método de autenticación para la introspección de tokens |
public_key | N/A | Clave pública para la autenticación de tokens |
token_signing_alg_values_expected | N/A | Algoritmo para los tokens de autenticación |
set_access_token_header | true | Si se debe incluir el token de acceso en el encabezado de la solicitud |
access_token_in_authorization_header | false | El 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_header | false | No incluir el token ID en el encabezado X-ID-Token de la solicitud |
set_userinfo_header | false | Si 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
-
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").
-
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.
-
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 medianteaccess_token_in_authorization_header
en la configuración del complemento.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-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.Como puedes ver, Apache APISIX llevará los encabezados de solicitud
X-Access-Token
,X-Id-Token
yX-Userinfo
al upstream. El upstream puede analizar estos encabezados para obtener la información de ID del usuario y los metadatos del usuario. -
En "Audit Log - User Behavior Log" en la consola de Authing, puedes observar la información de inicio de sesión de user1.
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.