web-dev-qa-db-fra.com

Utilisation de Keycloak derrière un proxy inverse: impossible d'ouvrir la page de connexion de l'administrateur car contenu mixte

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: error

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").

13
Dominik

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.

16
Boomer

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.

11
László Szabó

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

1
HuBaoQi