j'ai donc du mal à faire fonctionner keycloak 3.2.1 derrière kong (0.10.3), un proxy inverse basé sur nginx.
Le scénario est le suivant:
J'appelle keycloak via ma passerelle-route via https://{gateway}/auth
et il me montre le point d'entrée avec le logo keycloak, le lien vers la console d'administration, etc. - jusqu'à présent tout va bien.
Mais en cliquant sur la console d'administration -> appeler https://{gateway}/auth/admin/master/console/
, keycloak essaie de charger ses css/js via http (voir screenie ci-dessous), que mon navigateur bloque en raison d'un contenu mixte.
J'ai cherché et trouvé ce fil: configuration du serveur Apache keycloak avec des problèmes de 'contenu mixte' qui a conduit à ce dépôt github: https://github.com/dukecon/keycloak_postgres_https
À partir de là, j'ai essayé d'intégrer son 'cli dans mon dockerfile avec succès (je n'ai pas changé le contenu des fichiers, je les ai juste copiés dans mon référentiel et je les ai ajoutés/exécutés à partir de dockerfile). Voici mon dockerfile en ce moment:
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 existe toujours:
Je suis donc à court d'idées pour l'instant et j'espère que vous pourrez m'aider:
Comment puis-je dire à keycloak d'appeler ses 'fichiers css via 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 batch.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 également être intéressant de noter que kong est déployé sur openshift avec un itinéraire utilisant une redirection de http vers https ("insecureEdgeTerminationPolicy": "Redirect").
Cela ressemble en quelque sorte à un doublon de Keycloak Docker derrière loadbalancer avec https échoue
Définissez les en-têtes de demande X-Forwarded-For
et X-Forwarded-Proto
in nginx. Ensuite, vous devez configurer Keycloak (Wildfly, Undertow) pour fonctionner avec le proxy inverse de terminaison SSL (également appelé équilibreur 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 fait est que nginx termine SSL et transmet les demandes à Keycloak en tant que pure http. Par conséquent, Keycloak/Wildfly doit être informé que les demandes http entrantes de nginx doivent être traitées comme elles l'étaient https.
Ajouter le X-Forwarded-For
et X-Forwarded-Proto
en-têtes (comme l'a dit Boomer) dans tous les équilibreurs de charge en amont et assurez-vous qu'ils atteignent le serveur Keycloak. X-Forwarded-For
devrait être le domaine de votre Keycloak qui route vers le LB et X-Forwarded-Proto
devrait être le protocole (la plupart des cas https).
Enfin, vous devez modifier standalone.xml
ou standalone-ha.xml
fichier et ajoutez le proxy-address-forwarding="true"
attribuer à <http-listener>
élément sous <server>
.
Si vous utilisez Docker, vous pouvez utiliser PROXY_ADDRESS_FORWARDING
environnement var du conteneur Keycloak d'origine pour définir cet attribut.
J'ai le même problème avec vous, maintenant il a été corrigé , C'est ma méthode.
Tout d'abord, j'ai configuré un proxy inverse avec une cape à un environnement propre, confirmez que le proxy et la cape ont été correctement configurés.
Ensuite, avec test et gusess, j'ai trouvé lors de l'installation keycloak utiliser l'image que vous tirez de dockerhub avec docker. Il y a une certaine différence avec le binaire sur le serveur, à partir du standalone.xml, vous trouverez le point clé est le 2:
1. Vous devez définir PROXY_ADDRESS_FORWARDING = true pour docker env.
2. Vous devez définir jboss.https.port 443 pour docker env.
Si votre standalone.xml est également correctement configuré, vous le faire fonctionner pour la page d'administration. Bonne chance ;)