Cómo usar Apache APISIX Auth con Okta

Fei Han

September 7, 2021

Ecosystem

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:

  1. La autenticación centralizada de identidad simplifica el proceso de desarrollo de aplicaciones.
  2. 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

  1. Inicie sesión en su cuenta de Okta, haga clic en "Create App Integration" para crear una aplicación en Okta. Create App Integration
  2. Seleccione "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. 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/. Set the redirect URL for login and logout
  4. Después de completar la configuración, haga clic en "Save" para guardar los cambios. save the changes
  5. 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.

obtain configuration

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

  1. Cree un directorio llamado apisix-2.7.

    mkdir apisix-2.7
    
  2. 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.

  3. 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
    
  4. 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

  1. Ejecute el siguiente comando para iniciar Apache APISIX.

    apisix start
    
  2. 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:

CampoValor predeterminadoDescripció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á.
relmapisixEspecifique 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 redirige de vuelta, por defecto es la dirección de la solicitud.
timeout3Tiempo de espera de la solicitud, la unidad está definida en segundos.
ssl_verifyfalseVerifique 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 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. 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. visit Okta login page

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

  3. 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-Access-Token

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

X-Userinfo

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

Tags: