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:
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-connect
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
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 comandopython
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",
"...":"...",
}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_endpoint
de Paso 3 (en esta guía,https://<casdoor-server-address>/login/oauth/authorize
)map $host $oidc_token_endpoint
- Use el valor deltoken_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 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_uri
en 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_uri
se 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_keyfile
al valor obtenido del campojwks_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:
- 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
). - 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.
- 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.