web-dev-qa-db-fra.com

La console d'administration Keycloak n'est pas accessible

J'essaie de configurer Keycloak sur un serveur racine mais je ne peux pas accéder à la console d'administration depuis Internet. J'ai installé le serveur keycloak et l'ai placé derrière un proxy inverse nginx sur la même machine. J'ai configuré un certificat letsencrypt pour le domaine. J'ai également configuré l'utilisateur administrateur pour keycloak via un script.

Lorsque je visite le serveur avec son domaine https://<my-domain>, Je suis redirigé vers https://<my-domain>/auth Et il y a la page d'accueil de keycloak avec un lien vers "Administration Console". Ce lien pointe vers https://<my-domain>/admin Mais affiche un 404.

Au début, j'ai pensé que cela pourrait être un problème avec nginx, j'ai donc suivi le guide dans la documentation pour configurer un équilibreur de charge ( https://www.keycloak.org/docs/latest/server_installation/index.html# _setting-up-a-load-balancer-or-proxy ). Là, sous "Vérifier la configuration", il vous dit d'ouvrir le chemin https://<my-domain>/auth/realms/master/.well-known/openid-configuration Qui fonctionne comme prévu et j'obtiens un fichier json avec plusieurs liens et d'autres informations. Cependant, aucun de ces liens ne fonctionne - tous me donnent un 404.

Lorsque j'essaye https://<my-domain>/auth/realms/master, J'obtiens une réponse JSON. Donc, certains liens fonctionnent donc je pense que ce n'est pas un problème avec nginx mais avec keycloak lui-même.

La question de base est donc la suivante: comment configurer Keycloak pour pouvoir accéder à la console d'administration via Internet? J'ai lu que par défaut, vous ne pouvez y accéder que sur localhost, mais il doit y avoir un moyen de remplacer cette valeur par défaut?

La configuration nginx pertinente:

upstream keycloak {
    server 127.0.0.1:8080;
}

server {
    listen 443 ssl http2;
    # some ssl configuration for letsencrypt

    location / {
        proxy_pass          http://keycloak;
        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-Host    $Host;
        proxy_set_header    X-Forwarded-Server  $Host;
        proxy_set_header    X-Forwarded-Port    $server_port;
        proxy_set_header    X-Forwarded-Proto   $scheme;
    }
}

Certaines parties de keycloak/standalone/configuration/standalone.xml Que j'ai modifiées:

<subsystem xmlns="urn:jboss:domain:undertow:10.0" ...>
    ...
    <server name="default-server">
        <http-listener name="default" 
            socket-binding="http" 
            redirect-socket="proxy-https"
            enable-http2="true"
            proxy-address-forwarding="true" />
        ...
    </server>
    ...
</subsystem>
...
<interfaces>
    <interface name="management">
        <any-address />
    </interface>
    <interface name="public">
        <any-address />
    </interface>
</interfaces>
<socket-binding-group name="standard-sockets" ...>
    ...
    <socket-binding name="proxy-https" port="443" />
    ...
</socket-binding-group>

ÉDITER

J'ai pu le réparer. Le problème était que keycloak redirigeait la page initiale de https://<my-domain>/ Vers https://<my-domain>/auth Mais que dans tous les autres liens, ce /auth Supplémentaire manquait. Ainsi, le lien d'administration pointait vers https://<my-domain>/admin/master/console Sans la partie /auth Et cette page n'existait pas. Lorsque j'ai tapé manuellement l'URL contenant /auth, J'ai reçu une page avec un message "chargement ..", mais tous les fichiers de style et JavaScript liés où il manquait également la partie /auth Dans leurs URL. rien ne fonctionnait.

Pour résoudre ce problème, j'avais maintenant changé dans standalone.xml La ligne <web-context>auth</web-context> En <web-context>/</web-context> Et maintenant tout se comporte comme prévu. Il n'y a plus de redirection à la page de démarrage et tous les liens fonctionnent sans la partie /auth. Cependant, il serait intéressant de savoir pourquoi cela ne fonctionnait pas en premier lieu et comment résoudre ce problème si la redirection /auth Était prévue.

6
Manuel Mauky

Essayez open/auth/admin/master/console/dans un navigateur.

Information additionnelle:

https://www.keycloak.org/docs/latest/getting_started/index.html

https://www.keycloak.org/docs-api/8.0/rest-api/index.html

Oh, et je recommande d'utiliser un Keycloak dockerisé. Le chemin de mise à niveau vers une version plus récente est beaucoup plus simple.

0
Julian Egner