
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=true
Folgendes 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_FORWARDING
env, 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_FORWARDING
auf „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