Uso del plugin OpenID Connect de Apache APISIX para la autenticación centralizada de identidades

API7.ai

September 7, 2021

Ecosystem

Usar el plugin OpenID Connect de Apache APISIX para configurar la autenticación de Okta es un proceso simple de tres pasos. Esto te permite cambiar del modo de autenticación tradicional al modo de autenticación de identidad centralizada. Las siguientes secciones describen los pasos para configurar la autenticación de Okta utilizando el plugin OpenID Connect para Apache APISIX.

El modo de autenticación de identidad centralizada, en comparación con el modo de autenticación tradicional, tiene las siguientes ventajas:

  1. La autenticación de identidad centralizada simplifica el proceso de desarrollo de aplicaciones.
  2. La autenticación de identidad centralizada mejora la seguridad del negocio.

Requisito previo

Tener una cuenta de Okta lista para usar.

Paso 1: Configurar Okta

  1. Inicia sesión en tu cuenta de Okta, haz clic en "Create App Integration" para crear una aplicación de Okta. Create App Integration
  2. Selecciona "OIDC- OpenID Connect" como método de inicio de sesión y "Web Application" como tipo de aplicación. Create a new App Integration
  3. Configura 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 tanto las URIs de redirección de inicio como de cierre de sesión a http://127.0.0.1:9080/. Set the redirect URL for login and logout
  4. Después de completar la configuración, haz clic en "Save" para guardar los cambios. save the changes
  5. Visita la página General de la aplicación para obtener la siguiente configuración, que es necesaria para configurar el plugin 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 nombre de dominio utilizado por la aplicación, correspondiente a {ISSUER} a continuación.

obtain configuration

Paso 2: Instalar Apache APISIX

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 & 32, Ubuntu 16.04 & 18.04, Debian 9 & 10 y MacOS. Consulta Install Dependencies para más detalles.

Instalar 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

Instalar mediante Docker

Consulta: Installing Apache APISIX with Docker.

Instalar mediante Helm Chart

Consulta: Installing Apache APISIX with Helm Chart.

Instalar mediante Release de Fuentes

  1. Crea un directorio llamado apisix-2.7.

    mkdir apisix-2.7
    
  2. Descarga el paquete 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 fuente de Apache APISIX Release desde el sitio web de Apache APISIX. La Página de Descargas del Sitio Oficial de Apache APISIX también proporciona paquetes fuente para Apache APISIX, APISIX Dashboard y APISIX Ingress Controller.

  3. Descomprime el paquete fuente de Apache APISIX Release.

    tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
    
  4. Instala las bibliotecas Lua dependientes del 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.

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

Paso 3: Iniciar Apache APISIX y Configurar la Ruta Correspondiente

  1. Ejecuta el siguiente comando para iniciar Apache APISIX.

    apisix start
    
  2. Crea una ruta y configura el plugin OpenID Connect. El siguiente ejemplo de código crea una ruta a través de la API de Administración de Apache APISIX, configurando el upstream path a httpbin.org, un servicio backend simple para recibir y responder solicitudes. A continuación, se utilizará la página get de httpbin.org. Consulta http bin get para más información. Para los elementos de configuración específicos, consulta el Plugin OpenID Connect de Apache APISIX.

Los campos de configuración de OpenID Connect se enumeran a continuación:

CampoValor por DefectoDescripción
client_id""ID del cliente OAuth.
client_secret""Secreto del cliente OAuth.
discovery""Puntos finales de descubrimiento de servicios para proveedores de identidad.
scopeopenidAlcance de los recursos a los que se accederá.
relmapisixEspecifica la información de autenticación del 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 redirecciona de vuelta, por defecto es la dirección de la solicitud.
timeout3Tiempo de espera de la solicitud, la unidad está definida en segundos.
ssl_verifyfalseVerifica 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_methodclient_secret_basicNombre 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 los tokens de autenticación.
set_access_token_headertrueSi se debe llevar el token de acceso en el encabezado de la solicitud.
access_token_in_authorization_headerfalseSi 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_headertrueSi se debe llevar el token ID en el encabezado de solicitud X-ID-Token.
set_userinfo_headertrueSi 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

  1. Visita "http://127.0.0.1:9080/get" y la página será redireccionada a la página de inicio de sesión de Okta porque el plugin OpenID Connect está habilitado. visit Okta login page

  2. Ingresa el nombre de usuario y la contraseña de la cuenta de Okta del usuario y haz clic en "Sign In" para iniciar sesión en tu cuenta de Okta.

  3. Después de un inicio de sesión exitoso, puedes 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 plugin en el encabezado de solicitud Authorization.

X-Access-Token

X-Id-Token: Apache APISIX obtendrá el token ID del proveedor de identidad a través de la codificación base64 en el encabezado de solicitud X-Id-Token. Puedes elegir si habilitar esta función a través de set_id_token_header en la configuración del plugin, que está habilitada por defecto.

X-Id-Token

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. Puedes elegir si habilitar esta función a través de set_userinfo_header en la configuración del plugin, que está habilitada por defecto.

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 del ID del usuario y los metadatos del usuario.

Hemos mostrado el proceso de construir autenticación de identidad centralizada 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 trabajo del desarrollador 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 tus aplicaciones. Obtén autenticación escalable integrada directamente en tu aplicación sin la carga de desarrollo, los riesgos de seguridad y el mantenimiento que conlleva codificarlo tú mismo. Puedes conectar cualquier aplicación en cualquier lenguaje o en cualquier pila a Okta y definir cómo deseas que tus usuarios inicien sesión. Cada vez que un usuario intenta autenticarse, Okta verificará su identidad y enviará la información requerida de vuelta a tu 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 balanceo de carga, upstream dinámico, lanzamiento canario, corte de circuito, autenticación, observabilidad y más. Puedes usar Apache APISIX para manejar tráfico tradicional norte-sur, así como tráfico este-oeste entre servicios. También puede usarse como un controlador de ingress de 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

Tags: