Saltar al contenido principal

Nginx

Habilitar el inicio de sesión único basado en OpenID Connect para aplicaciones proxy por NGINX Plus usando Casdoor como proveedor de identidad (IdP).

Esta guía explica cómo habilitar el inicio de sesión único (SSO) para aplicaciones que están siendo proxy por NGINX Plus. La solución utiliza OpenID Connect como mecanismo de autenticación, con Casdoor como proveedor de identidad (IdP) y NGINX Plus como la parte confiante.

Ver También: Puede encontrar más información sobre la integración de NGINX Plus OpenID Connect en el repositorio de GitHub del proyecto.

Prerrequisitos

Las instrucciones asumen que usted tiene lo siguiente:

  • Un servidor Casdoor en funcionamiento. Consulte la documentación de Casdoor para Instalación del Servidor y Pruebe con Docker.

  • Una suscripción a NGINX Plus y NGINX Plus R15 o posterior. Para instrucciones de instalación, consulte la Guía del Administrador de NGINX Plus.

  • El módulo JavaScript de NGINX, que es necesario para manejar la interacción entre NGINX Plus y el IdP. Después de instalar NGINX Plus, instale el módulo utilizando el comando apropiado para su sistema operativo.

    Para Debian y Ubuntu:

    sudo apt install nginx-plus-module-njs

    Para CentOS, RHEL y Oracle Linux:

    sudo yum install nginx-plus-module-njs
  • La siguiente directiva debe incluirse en el contexto de configuración de nivel superior ("main") en /etc/nginx/nginx.conf para cargar el módulo JavaScript de NGINX:

    load_module modules/ngx_http_js_module.so;

Configurando Casdoor

Nota: El siguiente procedimiento refleja la GUI de Casdoor en el momento de la publicación, pero la GUI está sujeta a cambios. Utilice esta guía como referencia y adáptela a la GUI actual de Casdoor según sea necesario.

Para crear un cliente Casdoor para NGINX Plus en la GUI de Casdoor, siga estos pasos:

  1. Inicie sesión en su cuenta de Casdoor en http://your-casdoor-url.com/login/.

  2. En la columna de navegación superior, haga clic en Aplicación. En la página Aplicación que se abre, haga clic en el botón Añadir en la esquina superior izquierda.

    addApp

  3. En la página Editar Aplicación que se abre, cambie el valor en los campos Nombre y Nombre para mostrar al nombre de la aplicación para la cual está habilitando SSO. Aquí, estamos usando NGINX Plus.

    appName

    En el campo URLs de Redirección, escriba la URL de la instancia de NGINX Plus incluyendo el número de puerto, y terminando en /_codexch (en esta guía es https://your-site-url.com:443/_codexch).

    redirectURL

    Notas:

    • Para producción, recomendamos encarecidamente que utilice SSL/TLS (puerto 443).
    • El número de puerto es obligatorio incluso cuando está utilizando el puerto predeterminado para HTTP (80) o HTTPS (443).
  4. Registre los valores en los campos ID de Cliente y Secreto de Cliente. Los copiará en el archivo de configuración de NGINX Plus en Paso 4 de Configurando NGINX Plus.

    Cliente

  5. Haga clic en Roles en la columna de navegación superior, luego haga clic en el botón Añadir en la esquina superior izquierda de la página que se abre.

    addRole

  6. En la página Añadir que se abre, escriba un valor en los campos Nombre y Nombre para mostrar (aquí es nginx-casdoor-role) y haga clic en el botón Guardar.

    roleName

  7. En la columna de navegación superior, haga clic en Usuarios. En la página Usuarios que se abre, haga clic en Editar para editar uno de los usuarios existentes o haga clic en el botón Añadir en la esquina superior izquierda para crear un nuevo usuario.

  8. En la página Añadir que se abre, modifique los campos Nombre y Nombre para mostrar como desee (aquí es user1).

    userName

    Seleccione NGINX Plus en el campo Aplicación de registro.

    signupApp

    En el campo Cuentas administradas, seleccione NGINX Plus en Aplicación y complete el nombre de usuario y la contraseña.

    managedAcc

  9. Regrese a la página Roles y haga clic en Editar en la fila de nginx-casdoor-role. En la página que se abre, en el campo Sub usuarios, seleccione el nombre de usuario que acaba de crear (aquí es built-in/user1).

    subUsers

Configurando NGINX Plus

Para configurar NGINX Plus como la parte confiante de OpenID Connect, siga estos pasos:

  1. Comience por crear un clon del repositorio de GitHub nginx-openid-connect:

    git clone https://github.com/nginxinc/nginx-openid-connect
  2. Copie los siguientes archivos del clon al directorio /etc/nginx/conf.d:

    • frontend.conf
    • openid_connect.js
    • openid_connect.server_conf
    • openid_connect_configuration.conf
  3. Recupere las URL para el punto final de autorización, el punto final de token y el archivo de clave web JSON (JWK) de la configuración de Casdoor. Abra un terminal y ejecute el siguiente comando curl, canalizando la salida al comando python indicado para generar un formato de configuración legible. Por brevedad, hemos truncado la salida para mostrar solo los campos relevantes.

    curl http://<casdoor-server-address>/.well-known/openid-configuration | python -m json.tool
    {
    "authorization_endpoint": "https://<casdoor-server-address>/login/oauth/authorize",
    "...":"...",
    "token_endpoint": "http://<casdoor-server-address>/api/login/oauth/access_token",
    "...":"...",
    "jwks_uri": "http://<casdoor-server-address>/.well-known/jwks",
    "...":"...",
    }
  4. Abra /etc/nginx/conf.d/openid_connect_configuration.conf usando su editor de texto preferido. Modifique el valor del parámetro "default" para cada una de las siguientes directivas map con los valores especificados:

    • map $host $oidc_authz_endpoint - Use el valor del authorization_endpoint de Paso 3 (en esta guía, https://<casdoor-server-address>/login/oauth/authorize)
    • map $host $oidc_token_endpoint - Use el valor del token_endpoint de Paso 3 (en esta guía, http://<casdoor-server-address>/api/login/oauth/access_token)
    • map $host $oidc_client - Use el valor en el campo ID de Cliente de Paso 4 de Configurando Casdoor
    • map $host $oidc_client_secret - Use el valor en el campo Secreto de Cliente de Paso 2 de Configurando Casdoor
    • map $host $oidc_hmac_key - Use una frase única, larga y segura
  5. Configure el archivo JWK basado en la versión de NGINX Plus que está utilizando:

    • En NGINX Plus R17 y posteriores, NGINX Plus puede leer directamente el archivo JWK desde la URL especificada como jwks_uri en Paso 3. Haga los siguientes cambios en /etc/nginx/conf.d/frontend.conf:
      1. Comente (o elimine) la directiva auth_jwt_key_file.
      2. Descomente la directiva auth_jwt_key_request. (El parámetro /_jwks_uri se refiere al valor de la variable $oidc_jwt_keyfile, que se establecerá en el siguiente paso.)
      3. Actualice el parámetro "default" de la directiva map $host $oidc_jwt_keyfile al valor obtenido del campo jwks_uri en Paso 3 (en esta guía, http://<casdoor-server-address>/.well-known/jwks).
    • En NGINX Plus R16 y anteriores, o si se prefiere, el archivo JWK debe estar ubicado en el disco local. Siga estos pasos:
      1. Copie el contenido JSON del archivo JWK especificado en el campo jwks_uri en Paso 3 (en esta guía, http://<casdoor-server-address>/.well-known/jwks) a un archivo local (por ejemplo, /etc/nginx/my_casdoor_jwk.json).
      2. En /etc/nginx/conf.d/openid_connect_configuration.conf, cambie el parámetro "default" de la directiva map $host $oidc_jwt_keyfile a la ruta del archivo local.
  6. Asegúrese de que el usuario especificado en la directiva user dentro del archivo de configuración de NGINX Plus (generalmente /etc/nginx/nginx.conf) tenga permisos de lectura para el archivo JWK.

Pruebas

Abra un navegador e ingrese la dirección de su instancia de NGINX Plus. Luego, intente iniciar sesión con las credenciales de un usuario al que se le haya asignado el rol de NGINX Plus.

test

Resolución de problemas

Por favor, consulte la sección Resolución de problemas en el repositorio nginx-openid-connect en GitHub.