Keycloak-Leerseite hinter dem Nginx-Reverse-Proxy

Keycloak-Leerseite hinter dem Nginx-Reverse-Proxy

Nachdem ich Keycloak entpackt und gestartet hatte, um auf 127.0.0.1 zu lauschen, konfigurierte ich Nginx so, dass es als Reverse-Proxy funktioniert, auf den von einer öffentlich verfügbaren Domäne über https zugegriffen werden kann.

Dies ist die Nginx-Konfiguration:

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; }
    }

}

An keiner Datei im Keycloak-Verzeichnis wurde etwas geändert.

Auf Keycloak kann zugegriffen werden. Beim Navigieren zur Anmeldeseite wird mir jedoch aufgrund eines JavaScripts mit gemischten Inhalten von eine leere Seite angezeigt /auth/js/keycloak.js?version=df45z.

Dies kann vorübergehend gelöst werden, indem der Schutz des Browsers vor gemischten Inhalten deaktiviert wird. Dadurch gelange ich jedoch zu einer nicht funktionierenden Anmeldeseite mit folgender Fehlermeldung: We are sorry... Invalid parameter: redirect_uri.

Außerdem wurde ein HTTP 400 zurückgegeben von /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.

(Ich hoffe, dass der Ursprung von Bedeutung ist)

In früheren Fragen zu diesem Problem wurde lediglich vorgeschlagen, die Direktiven „proxy_set_header“ hinzuzufügen. Dadurch wurde ein leerer Bildschirm des anfänglichen Dashboards vermieden, das beim Zugriff auf die Keycloak-Webseite angezeigt wird. Bei dem zuletzt genannten Problem wurde dies jedoch nicht behoben.

Bitte bedenken Sie, dass ich mich mit diesem Thema noch nicht so gut auskenne und deshalb möglicherweise etwas Triviales übersehen habe.

Jeder Ratschlag zur Behebung dieses Verhaltens ist sehr willkommen.

Antwort1

Ihre Nginx-Konfiguration sieht gut aus. Ich hatte vor kurzem das gleiche Problem wie Sie und hatte mehr oder weniger die gleiche Nginx-Konfiguration.

Das Einzige, was ich noch tun musste, war, die Standalone-Konfigurationsdatei im KeyCloak-Ordner zu aktualisieren. Sie finden diese Datei unter keycloak_folder/standalone/configuration/standalone.xml.

Hier müssen Sie nach folgendem suchen (+- Zeile 572):

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

Und fügen Sie proxy-address-forwarding=trueFolgendes hinzu:

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

Dadurch wird sichergestellt, dass Ihr interner KeyCloak JBoss-Server die Proxy-Adresse kennt.

Antwort2

Keycloak akzeptiert PROXY_ADDRESS_FORWARDINGenv, das in derstandalone.xml

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

Stellen Sie es Docker entweder mit dem Abschnitt PROXY_ADDRESS_FORWARDING„docker -e“ oder „docker-compose“ zur Verfügung.environment

Antwort3

Zusätzlich zu dem, was Thorchy geschrieben hat:

Ich hatte http_auth bei nginx aktiviert. Ich habe vergessen, nginx neu zu starten, nachdem ich es aus der Konfiguration entfernt hatte.

Das Deaktivieren von http_auth durch einen Neustart von nginx löste das Problem schließlich.

Antwort4

Endlich habe ich das Problem behoben.

Die meisten Antworten bei Google müssen PROXY_ADDRESS_FORWARDINGauf „true“ gesetzt werden. Funktioniert in meiner Umgebung aber nicht.

Schließlich sah ich diese Antwort:https://github.com/codecentric/helm-charts/issues/271#issuecomment-920600882

Nachdem ich eingestellt habe KEYCLOAK_FRONTEND_URL, funktioniert es jetzt

Fügen Sie die folgende Umgebungsvariable hinzu.

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

verwandte Informationen