À l'aide de Keycloak derrière un reverse proxy: ne Peut pas ouvrir Admin loginpage en raison du Contenu mixte
donc j'ai un problème keycloak 3.2.1 le travail d'arrière-kong (0.10.3), un reverse proxy basé sur nginx.
Scénario:
J'appelle keycloak via mon passerelle de l'itinéraire via https://{gateway}/auth
et il me montre le point d'entrée avec keycloak logo, lien vers l'admin console etc. - c'est très bien.
Mais lorsque l'on clique sur la console d'administration -> appel https://{gateway}/auth/admin/master/console/
, keycloak essaie de charger ses css/js via http (voir screenie ci-dessous), mon navigateur bloque à cause du contenu mixte.
J'ai cherché et trouvé ce fil: keycloak la configuration du serveur apache avec "Contenu Mixte" les problèmes d' qui conduisent à ce dépôt github: https://github.com/dukecon/keycloak_postgres_https
À partir de là, j'ai essayé d'intégrer ses cli dans mon dockerfile avec succès (ne pas modifier le contenu des fichiers, juste copié dans mon repo et ajouter/exécuter à partir de dockerfile). C'est mon dockerfile dès maintenant:
FROM jboss/keycloak-postgres:3.2.1.Final
USER root
ADD config.sh /tmp/
ADD batch.cli /tmp/
RUN bash /tmp/config.sh
#Give correct permissions when used in an OpenShift environment.
RUN chown -R jboss:0 $JBOSS_HOME/standalone && \
chmod -R g+rw $JBOSS_HOME/standalone
USER jboss
EXPOSE 8080
Malheureusement, mon problème persiste:
Donc je suis à court d'idées pour l'instant et j'espère que vous pourriez m'aider:
- Comment puis-je dire keycloak appeler son " css fichiers via le protocole https ici?
- dois-je changer quelque chose dans le script cli?
Voici le contenu du script:
config.sh:
#!/bin/bash -x
set -e
JBOSS_HOME=/opt/jboss/keycloak
JBOSS_CLI=$JBOSS_HOME/bin/jboss-cli.sh
JBOSS_MODE=${1:-"standalone"}
JBOSS_CONFIG=${2:-"$JBOSS_MODE.xml"}
echo "==> Executing..."
cd /tmp
$JBOSS_CLI --file=`dirname "$0"`/batch.cli
# cf. http://stackoverflow.com/questions/34494022/permissions-error-when-using-cli-in-jboss-wildfly-and-docker
/bin/rm -rf ${JBOSS_HOME}/${JBOSS_MODE}/configuration/${JBOSS_MODE}_xml_history/current
et lot.cli:
embed-server --std-out=echo
# http://keycloak.github.io/docs/userguide/keycloak-server/html/server-installation.html
# 3.2.7.2. Enable SSL on a Reverse Proxy
# First add proxy-address-forwarding and redirect-socket to the http-listener element.
# Then add a new socket-binding element to the socket-binding-group element.
batch
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=proxy-address-forwarding,value=true)
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=redirect-socket,value=proxy-https)
/socket-binding-group=standard-sockets/socket-binding=proxy-https:add(port=443)
run-batch
stop-embedded-server
Il peut être intéressant aussi, que kong est déployé sur openshift avec un itinéraire à l'aide d'une redirection http vers https ( "insecureEdgeTerminationPolicy": "Redirect" ).
OriginalL'auteur Dominik | 2017-11-08
Vous devez vous connecter pour publier un commentaire.
Cela sonne un peu comme un double de Keycloak Docker derrière loadbalancer avec https échoue
Définir les en-têtes de requête
X-Forwarded-For
etX-Forwarded-Proto
dans nginx. Vous devez ensuite configurer Keycloak (Wildfly, Reflux) de travailler ensemble avec le SSL de terminaison du proxy inverse (aka équilibrage de charge). Voir http://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy pour une description détaillée.Le point est que nginx est de terminaison SSL et est de transférer la demande à Keycloak comme pure http. Donc Keycloak/Wildfly doit être dit que la prochaine http demandes de nginx doivent être manipulés comme s'ils étaient https.
Pour quelqu'un coincé dans la même situation, je vais aussi laisser cette astuce ici: à Part les choses de Boomer décrit (en fait, kong envoie le bon en-têtes par défaut), nous avons eu un problème avec notre openshift service, qui a été appelé via le port 8080. le port standard de liaison pour 8080 dans le kc est http, donc kc servi http. Nous avons changé notre openshift config à utiliser 8443, et le tour est joué. travaillé. 🙂
Un peu sans rapport avec la question, comment Keycloak résoudre son url de base? Nous avons un Keycloak istance avec un public et privé de l'adresse ip et le
iss
domaine de la JWT porteur du jeton (qui est le domaine de l'url) des changements en conséquence, c'est à dire si nous avons touché le auth ordinateur d'extrémité à partir de l'adresse publique de laiss
champ estpublic-ip/realms/master
et d'adresse ip privée c'estprivate-ip/realms/master
. Est-ce une HTTP magie ou un Kycloak config? Docs mentionner la configuration d'un proxy inverse, mais c'est une autre affaire, je suppose.OriginalL'auteur Boomer
Ajouter le
X-Forwarded-For
etX-Forwarded-Proto
les en-têtes (comme Boomer de le dire) dans tous amont des équilibreurs de charge et assurez-vous que ceux d'atteindre Keycloak serveur.X-Forwarded-For
doit être le domaine de votre Keycloak sur les routes à la LB etX-Forwarded-Proto
devrait être le protocole (la plupart des cas https).Comme étape finale, vous avez besoin de modifier
standalone.xml
oustandalone-ha.xml
fichier et ajouter leproxy-address-forwarding="true"
attribut<http-listener>
élément sous<server>
.Si vous utilisez le Panneau vous pouvez utiliser
PROXY_ADDRESS_FORWARDING
environnement var à partir de l'original Keycloak conteneur pour définir cet attribut.OriginalL'auteur László Szabó