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-njsPara CentOS, RHEL y Oracle Linux:
sudo yum install nginx-plus-module-njsLa 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:
Inicie sesión en su cuenta de Casdoor en http://your-casdoor-url.com/login/.
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.

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.

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

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

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.

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.

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.
En la página Añadir que se abre, modifique los campos Nombre y Nombre para mostrar como desee (aquí es user1).

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

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

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

Configurando NGINX Plus
Para configurar NGINX Plus como la parte confiante de OpenID Connect, siga estos pasos:
Comience por crear un clon del repositorio de GitHub nginx-openid-connect:
git clone https://github.com/nginxinc/nginx-openid-connectCopie los siguientes archivos del clon al directorio /etc/nginx/conf.d:
- frontend.conf
- openid_connect.js
- openid_connect.server_conf
- openid_connect_configuration.conf
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 comandopythonindicado 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",
"...":"...",
}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 delauthorization_endpointde Paso 3 (en esta guía,https://<casdoor-server-address>/login/oauth/authorize)map $host $oidc_token_endpoint- Use el valor deltoken_endpointde 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 Casdoormap $host $oidc_client_secret- Use el valor en el campo Secreto de Cliente de Paso 2 de Configurando Casdoormap $host $oidc_hmac_key- Use una frase única, larga y segura
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_urien Paso 3. Haga los siguientes cambios en /etc/nginx/conf.d/frontend.conf:- Comente (o elimine) la directiva auth_jwt_key_file.
- Descomente la directiva auth_jwt_key_request. (El parámetro
/_jwks_urise refiere al valor de la variable$oidc_jwt_keyfile, que se establecerá en el siguiente paso.) - Actualice el parámetro "default" de la directiva
map $host $oidc_jwt_keyfileal valor obtenido del campojwks_urien 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:
- Copie el contenido JSON del archivo JWK especificado en el campo
jwks_urien 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). - En /etc/nginx/conf.d/openid_connect_configuration.conf, cambie el parámetro "default" de la directiva
map $host $oidc_jwt_keyfilea la ruta del archivo local.
- Copie el contenido JSON del archivo JWK especificado en el campo
- En NGINX Plus R17 y posteriores, NGINX Plus puede leer directamente el archivo JWK desde la URL especificada como
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.

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