Nginx community edition
Prerrequisitos
Esta guía asume que tienes las siguientes condiciones:
- Servicio Casdoor en funcionamiento. If you haven't installed Casdoor service yet, see Server installation or Try with Docker.
- Edición de código abierto de Nginx con el módulo
ngx_http_auth_request_modulehabilitado en el momento de la compilación. See the Nginx auth_request module to enable it. - El sitio web en el que deseas habilitar la autenticación está exitosamente desplegado en Nginx, con un nombre de dominio configurado (en lugar de usar una dirección IP), y puede ser accedido normalmente.
- OAuth2-Proxy (choose one of the two popular options on GitHub):
- oauth2-proxy/oauth2-proxy (usado en este artículo) GitHub O Sitio Oficial
- vouch/vouch-proxy GitHub
I. Configurar Casdoor
Note: The Casdoor GUI may differ by version; use this article as a reference and adapt to your build.
Nota: Las claves, contraseñas, nombres de usuario y otra información confidencial mencionada en este artículo son todos ejemplos. Por razones de seguridad, debes reemplazarlos con tu propio contenido relevante al desplegar.
-
Inicia sesión en tu cuenta de administrador de Casdoor.
-
En la barra superior, selecciona "Autenticación de Identidad" > "Aplicaciones", y luego haz clic en "Agregar" en la página de "Aplicaciones".

-
Completa la configuración de la aplicación basada en la información de tu proyecto. En este artículo, usamos "Nginx-Community" como el nombre de la aplicación de ejemplo.

-
Toma nota de los valores de los campos "Client ID" y "Client Secret". Se utilizarán al configurar OAuth2-Proxy más adelante. Luego configura la "URL de Redirección" como
https://project.yourdomain.com/oauth2/callback/.
-
En la barra superior, selecciona "Gestión de Permisos de Casbin" > "Roles", y luego haz clic en "Agregar" en la página de "Roles".

-
Completa la configuración del rol basada en la información de tu proyecto. En este artículo, usamos "nginx_role" como el nombre del rol de ejemplo.

-
(Opcional) En la barra superior, selecciona "Gestión de Usuarios" > "Usuarios", y luego agrega nuevos usuarios según tus necesidades. If the users already exist, skip this step. En este artículo, creamos un usuario de ejemplo llamado "usuario".
-
Go back to the "Roles" page mentioned in step 5, edit the
nginx_rolerole, and add the required users to Included Users (e.g. the previously createdbuiltin/user).
II. Configurar Oauth2-Proxy
Note: For Vouch instead of OAuth2-Proxy, see vouch-proxy on GitHub.
Note: This guide assumes HTTPS (or HTTP→HTTPS redirect). For HTTP-only deployment, adjust the commands and see OAuth2-Proxy docs.
Consejos: OAuth2-Proxy proporciona varios métodos de implementación (como compilación de código fuente, instalación de Docker, etc.). Para facilitar la explicación, este artículo utiliza el "binario preconstruido" para la implementación.
-
Ve a la página de GitHub Releases y descarga el paquete binario correspondiente a tu sistema operativo y arquitectura de CPU. A partir del 1 de enero de 2024, la última versión de lanzamiento de OAuth-Proxy es
V7.5.1. To download the binary for this version on Linux AMD64, run:wget -O oauth2-proxy-linux.tar.gz https://github.com/oauth2-proxy/oauth2-proxy/releases/download/v7.5.1/oauth2-proxy-v7.5.1.linux-amd64.tar.gzSe recomienda encarecidamente que verifiques el valor de
SHA256SUMproporcionado por el sitio oficial en la página de GitHub Releases después de descargar el paquete comprimido y lo compares con el valor deSHA256SUMdel paquete que descargaste, carácter por carácter. -
Extrae el paquete descargado:
tar -zxvf oauth2-proxy-*.tar.gz -
Entra en el directorio extraído:
cd oauth2-proxy-v7.5.1.linux-amd64 -
Mueve el archivo binario obtenido a
/usr/local/biny configúralo con permisos de ejecución. Puede que necesites elevar permisos usandosudodependiendo de tu situación.cp ./oauth2-proxy /usr/local/bin
cd /usr/local/bin
chmod +x ./oauth2-proxy -
Prueba la instalación del binario. Si la instalación es exitosa, después de ejecutar el siguiente comando, deberías ver una salida similar a
oauth2-proxy v7.5.1 (construido con go1.21.1).cd ~
oauth2-proxy --version -
Ejecuta oauth2-proxy con parámetros de línea de comandos. Los parámetros marcados con [requerido] deben ser configurados de acuerdo a tu situación específica, mientras que los parámetros marcados con [opcional] pueden optimizar el rendimiento pero también pueden ser omitidos. To run oauth2-proxy in the background, use a process manager such as
Screen,Supervisor, or a terminal multiplexer.oauth2-proxy \
--provider=oidc \ #[required] Do not change
--client-id=abc123456def \ #[required] "Client ID" obtained in step I.4 above
--client-secret=abc123456def \ #[required] "Client Secret" obtained in step I.4 above
--oidc-issuer-url=https://auth.yourdomain.com \ #[required] Your Casdoor URL (domain name or public IP)
--redirect-url=https://project.yourdomain.com/oauth2/callback \ #[required] https://domain-of-the-project-to-protect/oauth2/callback
--scope=email+profile+groups+openid \ #[required] Obtained from Casdoor: user email, user profile, groups, and login authentication
--cookie-domain=project.yourdomain.com \ #[required] Domain name of the project you want to protect
--whitelist-domain=project.yourdomain.com \ #[required] Domain name of the project you want to protect
--cookie-secret=abc123456def \ #[required] Use a random string (letters and numbers)
--email-domain=* \ #[required] List of acceptable user email domains (* means accept all domains). If the user's email suffix is not in this list, a 403 error will be returned even if the login is successful.
--insecure-oidc-allow-unverified-email=true \ #[required] Whether to accept users with unverified email addresses
--http-address=http://127.0.0.1:65534 \ #[required] Address oauth2-proxy listens on; note this for the Nginx config later.
--cookie-expire=24h0m0s \ #[optional] Cookie expiration time. After this period, users will need to log in again.
--custom-sign-in-logo=https://cdn.yourdomain.com/pic/proj.png \ #[optional] Icon displayed on the login page. It is recommended to use a rectangular image rather than a square one.
--session-store-type=redis \ #[optional] Use Redis cache. Omit if not using Redis.
--redis-connection-url=redis://127.0.0.1:6379/0 \ #[optional] Redis URL. Omit if not using Redis.
--redis-password=123456 #[optional] Redis password. Omit if not using Redis or if Redis has no password.
III. Configurar Nginx
Note: If building Nginx from source, ensure ngx_http_auth_request_module is enabled (add --with_http_auth_request_module). See the Nginx auth_request module.
Consejos: Nginx instalado usando la herramienta del panel Baota no habilita este módulo por defecto.
-
Abre el archivo de configuración del sitio web que ya has desplegado y quieres proteger, y realiza las siguientes modificaciones:
Note: Adjust the config for your setup; Nginx version and environment may require changes.
server {
listen 443 ssl http2;
include /path/to/ssl.conf;
# Add the following content
location ^~ /oauth2/ {
proxy_pass http://127.0.0.1:65534; # Change this to the "--http-address" configured in step II.6
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Auth-Request-Redirect $request_uri;
# or, if you are handling multiple domains:
# proxy_set_header X-Auth-Request-Redirect $scheme://$host$request_uri;
}
location = /oauth2/auth {
proxy_pass http://127.0.0.1:65534; # Change this to the "--http-address" configured in step II.6
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header Content-Length "";
proxy_pass_request_body off;
}
location ^~ / {
auth_request /oauth2/auth;
error_page 401 = /oauth2/sign_in;
auth_request_set $user $upstream_http_x_auth_request_user;
auth_request_set $email $upstream_http_x_auth_request_email;
proxy_set_header X-User $user; # Pass the username of the user logged in to your backend service
proxy_set_header X-Email $email; # Pass the email of the user logged in to your backend service
auth_request_set $token $upstream_http_x_auth_request_access_token;
proxy_set_header X-Access-Token $token; # Pass the user's login token to your backend service
# The following configurations are related to cookie validation for user login
auth_request_set $auth_cookie $upstream_http_set_cookie;
add_header Set-Cookie $auth_cookie;
auth_request_set $auth_cookie_name_upstream_1 $upstream_cookie_auth_cookie_name_1;
if ($auth_cookie ~* "(; .*)") {
set $auth_cookie_name_0 $auth_cookie;
set $auth_cookie_name_1 "auth_cookie_name_1=$auth_cookie_name_upstream_1$1";
}
if ($auth_cookie_name_upstream_1) {
add_header Set-Cookie $auth_cookie_name_0;
add_header Set-Cookie $auth_cookie_name_1;
}
proxy_no_cache $cookie_session;
# Provide the web page to the user after successful validation
proxy_pass http://127.0.0.1:8080; # The address where your backend service runs
# Note: This is not the Casdoor deployment address or the Oauth2-Proxy running address, but the address where your backend service that needs login protection runs.
# Then add configurations to pass user IP, Connection request headers, etc., to your backend service, for example:
proxy_set_header X-Forwarded-For $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
access_log /path/to/access_log.log;
error_log /path/to/error_log.log;
} -
Guarda el archivo y recarga tu Nginx.
Pruebas
- Next, test your implementation.
- En circunstancias normales, tus usuarios pasarán por el siguiente proceso al iniciar sesión en tu servicio:
- Abrir la URL
project.yourdomain.comen un navegador -> Solo ver una página que requiere inicio de sesión, incluyendo un botón llamado "Iniciar sesión con OpenID Connect" -> Hacer clic en el botón y ser redirigido a tu dirección de Casdoor, donde se les pedirá que inicien sesión -> Los usuarios ingresan su nombre de usuario y contraseña, y Casdoor verifica sus credenciales -> Redirección automática de vuelta a tu URLproject.yourdomain.com-> Acceso exitoso a tu servicio -> A los usuarios se les pedirá que inicien sesión nuevamente cuando expire el tiempo de--cookie-expireque configuraste.
Resolución de problemas
- If it does not run as expected, check your Nginx and OAuth2-Proxy configuration.
- See OAuth2-Proxy documentation.
- To suggest fixes for this doc, open an issue or PR on GitHub.