Cómo usar Apache APISIX Auth con Okta
Fei Han
September 7, 2021
Uso del complemento OpenID Connect de Apache APISIX para la autenticación centralizada de identidad
Usar el complemento OpenID Connect de Apache APISIX para configurar la autenticación de Okta es un proceso simple de tres pasos. Permite cambiar del modo de autenticación tradicional al modo de autenticación centralizada de identidad. Las siguientes secciones describen los pasos para configurar la autenticación de Okta utilizando el complemento OpenID Connect para Apache APISIX.
El modo de autenticación centralizada de identidad, en comparación con el modo de autenticación tradicional, tiene las siguientes ventajas:
- La autenticación centralizada de identidad simplifica el proceso de desarrollo de aplicaciones.
- La autenticación centralizada de identidad mejora la seguridad del negocio.
Requisito previo
Tener una cuenta de Okta lista para usar.
Paso 1: Configuración de Okta
- Inicie sesión en su cuenta de Okta, haga clic en "Create App Integration" para crear una aplicación en Okta.
- Seleccione "OIDC- OpenID Connect" como método de inicio de sesión y "Web Application" como tipo de aplicación.
- Configure la URL de redirección para el inicio y cierre de sesión. Las "Sign-in redirect URIs" son los enlaces permitidos para redireccionar después de un inicio de sesión exitoso, y las "Sign-out redirect URIs" son los enlaces redireccionados después de un cierre de sesión exitoso. En este ejemplo, configuramos ambas URL de redirección de inicio y cierre de sesión como http://127.0.0.1:9080/.
- Después de completar la configuración, haga clic en "Save" para guardar los cambios.
- Visite la página General de la aplicación para obtener la siguiente configuración, necesaria para configurar el complemento OpenID Connect de Apache APISIX.
- Client ID: El ID de la aplicación, que corresponde a
client_id
a continuación. - Client secret: La clave de la aplicación, que corresponde a
client_secret
a continuación. - Okta domain: El dominio utilizado por la aplicación, correspondiente a
{ISSUER}
a continuación.
Paso 2: Instalación de Apache APISIX
Instalación de dependencias
El entorno de ejecución de Apache APISIX requiere dependencias de NGINX y etcd. Antes de instalar Apache APISIX, instale las dependencias según el sistema operativo que esté utilizando. Proporcionamos instrucciones de instalación de dependencias para CentOS7, Fedora 31 & 32, Ubuntu 16.04 & 18.04, Debian 9 & 10 y MacOS. Consulte Instalación de dependencias para más detalles.
Instalación mediante paquete RPM (CentOS 7)
Este método de instalación es adecuado para CentOS 7. Ejecute 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
Consulte: Instalación de Apache APISIX con Docker.
Instalación mediante Helm Chart
Consulte: Instalación de Apache APISIX con Helm Chart.
Instalación mediante versión de código fuente
-
Cree un directorio llamado
apisix-2.7
.mkdir apisix-2.7
-
Descargue el paquete de código fuente de la versión de Apache APISIX.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz
También puede descargar el paquete de código fuente de la versión de Apache APISIX desde el sitio web de Apache APISIX. La Página de descargas del sitio oficial de Apache APISIX también proporciona paquetes de código fuente para Apache APISIX, APISIX Dashboard y APISIX Ingress Controller.
-
Descomprima el paquete de código fuente de la versión de Apache APISIX.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
-
Instale las bibliotecas Lua dependientes del entorno de ejecución.
# Cambie al directorio apisix-2.7 cd apisix-2.7 # Cree las dependencias make deps
Inicialización de dependencias
Ejecute el siguiente comando para inicializar el archivo de configuración de NGINX y etcd.
# inicialice el archivo de configuración de NGINX y etcd
make init
Paso 3: Inicie Apache APISIX y configure la ruta correspondiente
-
Ejecute el siguiente comando para iniciar Apache APISIX.
apisix start
-
Cree una ruta y configure el complemento OpenID Connect. El siguiente ejemplo de código crea una ruta a través de la API de administración de Apache APISIX, configurando la ruta de upstream a httpbin.org, un servicio backend simple para recibir y responder solicitudes. A continuación, se utilizará la página get de httpbin.org. Consulte http bin get para más información. Para los elementos de configuración específicos, consulte el Complemento OpenID Connect de Apache APISIX.
Los campos de configuración de OpenID Connect se enumeran a continuación:
Campo | Valor predeterminado | Descripción |
---|---|---|
client_id | "" | ID del cliente OAuth. |
client_secret | "" | Secreto del cliente OAuth. |
discovery | "" | Puntos finales de descubrimiento de servicios para proveedores de identidad. |
scope | openid | Alcance de los recursos a los que se accederá. |
relm | apisix | Especifique la información de autenticación del 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 de vuelta, por defecto es la dirección de la solicitud. |
timeout | 3 | Tiempo de espera de la solicitud, la unidad está definida en segundos. |
ssl_verify | false | Verifique el certificado SSL del proveedor de identidad. |
introspection_endpoint | "" | La URL del punto final de autenticación de tokens del proveedor de identidad, que se extraerá de la respuesta de discovery 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 | "" | Clave pública para un token de autenticación. |
token_signing_alg_values_expected | "" | Algoritmo para tokens de autenticación. |
set_access_token_header | true | Si se debe llevar el token de acceso en el encabezado de la solicitud. |
access_token_in_authorization_header | false | Si se debe colocar un token de acceso en el encabezado Authorization. El token de acceso se coloca en el encabezado Authorization cuando este valor es true y en el encabezado X-Access-Token cuando es false. |
set_id_token_header | true | Si se debe llevar el token ID en el encabezado de solicitud X-ID-Token. |
set_userinfo_header | true | Si se debe llevar la información del usuario en el encabezado de solicitud X-Userinfo. |
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_ISSUER}/.well-known/openid-configuration",
"scope":"openid profile",
"bearer_only":false,
"realm":"master",
"introspection_endpoint_auth_method":"client_secret_post",
"redirect_uri":"http://127.0.0.1:9080/"
}
},
"upstream":{
"type":"roundrobin",
"nodes":{
"httpbin.org:80":1
}
}
}'
Verificación
-
Visite "http://127.0.0.1:9080/get" y la página se redirigirá a la página de inicio de sesión de Okta porque el complemento OpenID Connect está habilitado.
-
Ingrese el nombre de usuario y la contraseña de la cuenta de Okta del usuario y haga clic en "Sign In" para iniciar sesión en su cuenta de Okta.
-
Después de un inicio de sesión exitoso, puede acceder a la página get en "httpbin.org". La página "httpbin.org/get" devolverá los datos solicitados con X-Access-Token, X-Id-Token y X-Userinfo como se muestra a continuación.
"X-Access-Token": "******Y0RPcXRtc0FtWWVuX2JQaFo1ZVBvSlBNdlFHejN1dXY5elV3IiwiYWxnIjoiUlMyNTYifQ.***TVER3QUlPbWZYSVRzWHRxRWh2QUtQMWRzVDVGZHZnZzAiLCJpc3MiOiJodHRwczovL3FxdGVzdG1hbi5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vcXF0ZXN0bWFuLm9rdGEuY29tIiwic3ViIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImlhdCI6MTYyODEyNjIyNSwiZXhwIjoxNjI4MTI5ODI1LCJjaWQiOiIwb2ExMWc4ZDg3TzBGQ0dYZzY5NiIsInVpZCI6IjAwdWEwNWVjZEZmV0tMS3VvNjk1Iiwic2NwIjpbIm9wZW5pZCIsInByb2Zpb***.****iBshIcJhy8QNvzAFD0fV4gh7OAdTXFMu5k0hk0JeIU6Tfg_Mh-josfap38nxRN5hSWAvWSk8VNxokWTf1qlaRbypJrKI4ntadl1PrvG-HgUSFD0JpyqSQcv10TzVeSgBfOVD-czprG2Azhck-SvcjCNDV-qc3P9KoPQz0SRFX0wuAHWUbj1FRBq79YnoJfjkJKUHz3uu7qpTK89mxco8iyuIwB8fAxPMoXjIuU6-6Bw8kfZ4S2FFg3GeFtN-vE9bE5vFbP-JFQuwFLZNgqI0XO2S7l7Moa4mWm51r2fmV7p7rdpoNXYNerXOeZIYysQwe2_L****", "X-Id-Token": "******aTdDRDJnczF5RnlXMUtPZUtuSUpQdyIsImFtciI6WyJwd2QiXSwic3ViIjoiMDB1YTA1ZWNkRmZXS0xLdW82OTUiLCJpc3MiOiJodHRwczpcL1wvcXF0ZXN0bWFuLm9rdGEuY29tIiwiYXVkIjoiMG9hMTFnOGQ4N08wRkNHWGc2OTYiLCJuYW1lIjoiUGV0ZXIgWmh1IiwianRpIjoiSUQuNGdvZWo4OGUyX2RuWUI1VmFMeUt2djNTdVJTQWhGNS0tM2l3Z0p5TTcxTSIsInZlciI6MSwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImV4cCI6MTYyODEyOTgyNSwiaWRwIjoiMDBvYTA1OTFndHAzMDhFbm02OTUiLCJub25jZSI6ImY3MjhkZDMxMWRjNGY3MTI4YzlmNjViOGYzYjJkMDgyIiwiaWF0IjoxNjI4MTI2MjI1LCJhdXRoX3RpbWUi*****", "X-Userinfo": "*****lfbmFtZSI6IlpodSIsImxvY2FsZSI6ImVuLVVTIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsInVwZGF0ZWRfYXQiOjE2MjgwNzA1ODEsInpvbmVpbmZvIjoiQW1lcmljYVwvTG9zX0FuZ2VsZXMiLCJzdWIiOiIwMHVhMDVlY2RGZldLTEt1bzY5NSIsImdpdmVuX25hbWUiOiJQZXRlciIsIm5hbWUiOiJQZXRl****"
X-Access-Token: Apache APISIX coloca el token de acceso obtenido del proveedor de identidad en el encabezado de solicitud X-Access-Token, opcionalmente a través de access_token_in_authorization_header
en la configuración del complemento en el encabezado de solicitud Authorization.
X-Id-Token: Apache APISIX obtendrá el token ID del proveedor de identidad y lo codificará en Base64 en el encabezado de solicitud X-Id-Token. Puede elegir si habilitar esta función a través de set_id_token_header
en la configuración del complemento, que está habilitada por defecto.
X-Userinfo: Apache APISIX obtendrá la información del usuario del proveedor de identidad y la colocará en X-Userinfo después de codificarla con Base64. Puede elegir si habilitar esta función a través de set_userinfo_header
en la configuración del complemento, que está habilitada por defecto.
Como puede 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 del ID del usuario y los metadatos del usuario.
Hemos mostrado el proceso de construir autenticación centralizada de identidad desde Okta directamente en la puerta de enlace de Apache APISIX. Es fácil registrarse para obtener una cuenta gratuita de desarrollador de Okta para comenzar. Nuestro enfoque reduce la carga de los desarrolladores y permite una experiencia segura y optimizada.
Acerca de Okta
Okta es una solución personalizable, segura y lista para usar que agrega servicios de autenticación y autorización a sus aplicaciones. Obtenga autenticación escalable integrada directamente en su aplicación sin la carga de desarrollo, los riesgos de seguridad y el mantenimiento que conlleva codificarlo usted mismo. Puede conectar cualquier aplicación en cualquier lenguaje o en cualquier pila a Okta y definir cómo desea que sus usuarios inicien sesión. Cada vez que un usuario intenta autenticarse, Okta verificará su identidad y enviará la información requerida de vuelta a su aplicación.
Acerca de Apache APISIX
Apache APISIX es una puerta de enlace API dinámica, en tiempo real y de alto rendimiento. Apache APISIX proporciona funciones avanzadas de gestión de tráfico, como equilibrio de carga, upstream dinámico, lanzamiento canario, corte de circuito, autenticación, observabilidad y más. Puede usar Apache APISIX para manejar tráfico tradicional norte-sur, así como tráfico este-oeste entre servicios. También se puede usar como un controlador de entrada k8s.
Cientos de empresas en todo el mundo han utilizado Apache APISIX, cubriendo sectores como finanzas, internet, manufactura, retail y operadores, como NASA, la Fábrica Digital de la Unión Europea, TravelSky, Tencent, Huawei, Weibo, China Mobile, Taikang, 360, etc.
Github: https://github.com/apache/apisix
Sitio web: https://apisix.apache.org