Página en blanco de Keycloak detrás del proxy inverso nginx

Página en blanco de Keycloak detrás del proxy inverso nginx

Después de desempacar e iniciar keycloak para escuchar en 127.0.0.1, configuré nginx para que funcione como un proxy inverso accesible desde un dominio disponible públicamente a través de https.

Esta es la configuración de nginx:

http
{
    server_tokens off;

    upstream keycloak { ip_hash; server 127.0.0.1:8080; }

    server
    {   
        server_name name.domain.tld;
        listen 443 ssl http2; # managed by Certbot
        ssl_certificate /path/to/cert; # managed by Certbot
        ssl_certificate_key /path/to/key; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

        location /
        {   
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            add_header Access-Control-Allow-Origin *;
            proxy_pass http://keycloak;
        }
    }


    server
    {   
        server_name name.domain.tld;
        listen 80;
        location / { return 301 https://$server_name; }
    }

}

No se ha cambiado nada en ningún archivo dentro del directorio keycloak.

Se puede acceder a Keycloak, sin embargo, cuando navego a la página de inicio de sesión, me encuentro con una página en blanco debido a un javascript de contenido mixto de /auth/js/keycloak.js?version=df45z.

Esto se puede solucionar temporalmente desactivando la protección del navegador contra contenido mixto; sin embargo, esto me llevará a una página de inicio de sesión disfuncional y me mostrará este mensaje de error: We are sorry... Invalid parameter: redirect_uri.

Además, se devolvió un HTTP 400 de /auth/realms/master/protocol/openid-connect/auth?client_id=security-admin-console&redirect_uri=https%3A%2F%2Fname.domain.tld%2Fauth%2Fadmin%2Fmaster%2Fconsole%2F&state=5abb646f-d1c8-49ef-8ae1-9358bfc50d6d&response_mode=fragment&response_type=code&scope=openid&nonce=525b593c-07ab-4afa-8ca0-bd64499061eb.

(Esperando que su origen sea de algún valor)

Las preguntas anteriores relacionadas con este problema solo sugirieron agregar las directivas proxy_set_header, lo que evitó una pantalla en blanco en el panel inicial que ve cuando accede a la página web de keycloaks, pero no ayudó en el último problema mencionado.

Tenga en cuenta que soy bastante nuevo en este tema en caso de que me haya perdido algo trivial.

Cualquier consejo para solucionar este comportamiento es muy apreciado.

Respuesta1

Su configuración de Nginx se ve bien. Recientemente tuve el mismo problema que tú y tenía más o menos la misma configuración de Nginx.

Lo único que aún me queda por hacer es actualizar el archivo de configuración independiente en la carpeta KeyCloak. Puede encontrar este archivo en keycloak_folder/standalone/configuration/standalone.xml.

Aquí tendrás que buscar lo siguiente (+- línea 572):

<server name="default-server">
    <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" />
    ...
</server>

Y agrega algo proxy-address-forwarding=trueasí:

<server name="default-server">
    <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" proxy-address-forwarding="true" />
    ...
</server>

Esto asegurará que su servidor interno KeyCloak JBoss conozca la dirección del proxy.

Respuesta2

Keycloak acepta PROXY_ADDRESS_FORWARDINGenv que se coloca en elstandalone.xml

<http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="${env.PROXY_ADDRESS_FORWARDING:false}" enable-http2="true"/>

proporcionar a la ventana acoplable con la sección PROXY_ADDRESS_FORWARDINGdocker -e o docker-composeenvironment

Respuesta3

Además de lo que Thorchy escribió:

Tenía http_auth habilitado en nginx. No pude reiniciar nginx después de eliminarlo de la configuración.

Deshabilitar http_auth reiniciando nginx finalmente resolvió el problema.

Respuesta4

Finalmente solucioné el problema.

La mayoría de las respuestas en Google se establecen PROXY_ADDRESS_FORWARDINGen verdadero. Pero no funciona en mi entorno.

Finalmente vi esta respuesta:https://github.com/codecentric/helm-charts/issues/271#issuecomment-920600882

Después de configurarlo KEYCLOAK_FRONTEND_URL, funciona ahora.

Agregue la siguiente variable de entorno.

KEYCLOAK_FRONTEND_URL=https://{{ URL }}/auth

información relacionada