13. Nginx + OIDC
Note
Servidor web con authenticación externa
Instalación desde repositorios de Github
1wget -c https://github.com/oauth2-proxy/oauth2-proxy/releases/tag/v7.9.0
2tar xvfz oauth2-proxy-v7.9.0.linux-amd64.tar.gz
3cp oauth2-proxy /usr/local/bin
Fichero de configuracion /etc/oauth2-proxy.cfg
provider = "oidc" client_id = "nginx-access" client_secret = "l3Gd40pFVIXAh2YewzFy4w6NflaqxVDX" redirect_url = "https://dtremino.ddns.net/oauth2/callback" oidc_issuer_url = "https://keycloak.dominio.com:8443/realms/TFG-ACCESS" cookie_secret = "Zmu6Ise1FMoi4q6rsNO6TBOIvmFngzVJvoEHziIWRvA=" # head -c 32 /dev/urandom | base64 -w 0 email_domains = [ "*" ] http_address = "0.0.0.0:4180"
Servicio /etc/systemd/system/oauth2-proxy.service
[Unit] Description=OAuth2 Proxy After=network.target [Service] ExecStart=/usr/local/bin/oauth2-proxy --config /etc/oauth2-proxy.cfg Restart=on-failure [Install] WantedBy=multi-user.target
Fichero de configuracion /etc/nginx/nginx.conf
server { listen 443 ssl http2; server_name dominio.com; root /opt/html; index tfg.html; access_log /var/log/nginx/access_dominio.log custom; error_log /var/log/nginx/error_dominio.log; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; ssl_certificate /etc/letsencrypt/live/dominio.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/dominio.com/privkey.pem; location ^~ /oauth2/ { proxy_pass http://127.0.0.1:4180; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /emisor/ { include /etc/nginx/default.d/oauth2-protect.conf; proxy_pass http://10.10.1.25:8081/emisor/; } }
Fichero de configuracion /etc/nginx/default.d/oauth2-protect.conf
auth_request /oauth2/auth; error_page 401 = /oauth2/start; # Cabeceras opcionales que tu backend puede usar auth_request_set $user $upstream_http_x_auth_request_user; auth_request_set $email $upstream_http_x_auth_request_email; auth_request_set $access_token $upstream_http_x_auth_request_access_token; proxy_set_header X-User $user; proxy_set_header X-Email $email; proxy_set_header Authorization "Bearer $access_token";