129 votes

keycloak Paramètre non valide : redirect_uri

Lorsque j'essaie d'utiliser mon API pour authentifier un utilisateur à partir de Keycloak, je reçois l'erreur Invalid parameter : redirect_uri sur la page Keycloak. J'ai créé mon propre royaume en dehors du maître. keycloak fonctionne sur http. Veuillez m'aider.

0 votes

En vérifiant l'élément d'inspection, il montre une erreur 500

5 votes

Veuillez ne pas publier le même question plusieurs fois. Si vous souhaitez ajouter des détails à votre question initiale, vous pouvez le faire en cliquant sur "modifier" directement sous votre question.

2 votes

84voto

Akshay Points 443

Ce qui a marché pour moi, c'est d'ajouter wildchar '*' . Bien que pour les constructions de production, je vais être plus spécifique avec la valeur de ce champ. Mais pour les besoins du développement, vous pouvez faire ceci.

enter image description here

Paramètre disponible sous, console admin keycloak -> Nom du domaine -> Cients -> Nom du client .

EDIT : NE PAS FAIRE CELA EN PRODUCTION. Cela crée une importante faille de sécurité.

25 votes

Cette réponse peut constituer une dangereuse faille de sécurité. En agissant ainsi, vous ouvrez la porte à l'attaque par redirection non sécurisée.

6 votes

Je ne peux pas croire que cette réponse a actuellement les meilleurs votes. C'est loin d'être une solution et elle ne devrait vraiment apparaître que dans les commentaires. D'autre part, il y a trop peu d'informations dans la question pour même essayer d'y répondre.

0 votes

Que devons-nous y mettre si nous utilisons Keycloak depuis une application mobile (codée React Native) ?

49voto

Menuka Ishan Points 1144

Si vous êtes un développeur .Net, veuillez vérifier les configurations ci-dessous. Paramétrage de la classe d'options keycloakAuthentication CallbackPath = RedirectUri,//cette propriété doit être définie, sinon une erreur de redirecturi invalide sera affichée.

J'ai rencontré la même erreur. Dans mon cas, le problème concernait URIs de redirection valides n'était pas correct. Voici donc les étapes que j'ai suivies.

Connectez-vous d'abord à keycloack en tant qu'utilisateur admin. Sélectionnez ensuite votre domaine (vous serez peut-être dirigé automatiquement vers le domaine). Vous verrez alors l'écran ci-dessous

enter image description here

Sélectionnez Clients dans le panneau de gauche. Sélectionnez ensuite le client approprié que vous avez configuré pour votre application. Par défaut, vous serez Réglage de sinon, sélectionnez-le. Mon application fonctionnait sur le port 3000, donc mon réglage correct est comme ci-dessous. Disons que vous avez une application fonctionnant sur localhost:3000, votre configuration devrait être la suivante

enter image description here

24voto

Mr. Me Points 96

Si vous obtenez cette erreur à cause d'un nouveau royaume que vous avez créé

Dans l'URL vers laquelle vous êtes redirigé (il se peut que vous deviez chercher cette URL dans les outils de développement de Chrome), modifiez le domaine de la manière suivante master à celui que vous venez de créer, et si vous n'utilisez pas la fonction https puis assurez-vous que le redirect_uri utilise également http .

Si vous obtenez cette erreur parce que vous essayez de configurer Keycloak sur un domaine public (pas localhost)

Étape 1) Suivez cette documentation pour configurer une base de données MySql. Vous pouvez également avoir besoin de vous référer à la documentation officielle .

Étape 2) Exécutez la commande update REALM set ssl_required = 'NONE' where id = 'master';

Note : À ce stade, vous devriez techniquement être en mesure de vous connecter, mais la version 4.0 de Keycloak utilise https pour l'uri de redirection, même si nous venons de désactiver le support https. Jusqu'à ce que Keycloak corrige ce problème, nous pouvons le contourner avec un reverse proxy. Un reverse proxy est quelque chose que nous voudrons utiliser de toute façon pour créer facilement des certificats SSL/TLS sans avoir à se soucier des keystores Java.

Note 2 : Keycloak a depuis sorti son propre proxy. Je ne l'ai pas encore essayé, mais à ce stade, vous pourriez vouloir arrêter de suivre mes indications et vérifier (keycloak gatekeeper) . [https://www.keycloak.org/downloads.html\]](https://www.keycloak.org/downloads.html]) . Si vous avez des difficultés à mettre en place le Keycloak Gatekeeper, je conserve mes instructions pour la mise en place d'un reverse proxy avec Apache.

Étape 3) Installez Apache. Nous allons utiliser Apache comme proxy inverse (j'ai essayé NGINX, mais NGINX avait des limitations qui m'ont gêné). Voir yum installant Apache (CentOs 7), et apt-get install Apache (Ubuntu 16), ou trouvez les instructions pour votre distro spécifique.

Étape 4) Exécuter Apache

  • Utilisez sudo systemctl start httpd (CentOs) ou sudo systemctl start apache2 (Ubuntu)

  • Utilisez sudo systemctl status httpd (CentOs) ou sudo systemctl status apache2 (Ubuntu) pour vérifier si Apache est en cours d'exécution. Si vous voyez en vert les mots active (running) ou si la dernière entrée est la suivante Started The Apache HTTP Server. alors vous êtes bon.

Étape 5) Nous allons établir une connexion SSL avec le reverse proxy, puis le reverse proxy communiquera avec keyCloak par http. Comme cette communication http se fait sur la même machine, vous êtes toujours en sécurité. Nous pouvons utiliser Certbot pour configurer des certificats à renouvellement automatique.

Si ce type de cryptage n'est pas suffisant et que votre politique de sécurité exige un cryptage de bout en bout, vous devrez trouver comment configurer SSL via WildFly au lieu d'utiliser un proxy inverse.

Note : Je n'ai jamais réussi à faire fonctionner https correctement avec le portail d'administration. Il s'agit peut-être d'un bug de la version bêta de Keycloak 4.0 que j'utilise. Vous êtes censé être en mesure de définir le niveau SSL pour ne l'exiger que pour les demandes externes, mais cela ne semble pas fonctionner, c'est pourquoi nous avons défini https à aucun dans l'étape #2. A partir de maintenant, nous continuerons à utiliser http via un tunnel SSH pour gérer les paramètres d'administration.

Étape 6) Chaque fois que vous essayez de visiter le site via https, vous déclencherez une politique HSTS qui forcera automatiquement les demandes http à être redirigées vers https. Suivez ces instructions pour supprimer la règle HSTS de Chrome puis, pour l'instant, ne visitez plus la version https du site.

Étape 7) Configurez Apache. Tout d'abord, trouvez l'emplacement de votre Le fichier httpd.conf est situé . Votre fichier httpd.conf comprend probablement des fichiers de configuration provenant d'un répertoire distinct. Dans mon cas, j'ai trouvé tous mes fichiers de configuration dans un répertoire de type conf.d situé à côté du dossier dans lequel se trouvait le fichier httpd.conf.

Une fois que vous avez trouvé vos fichiers de conf, changez, ou ajoutez les entrées d'hôte virtuel suivantes dans vos fichiers de conf. Assurez-vous que vous ne remplacez pas les options SSL déjà présentes qui ont été générées par certbot. Une fois terminé, votre fichier de configuration devrait ressembler à quelque chose comme ceci.

<VirtualHost *:80>
    RewriteEngine on

    #change https redirect_uri parameters to http
    RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
    RewriteRule . %1redirect_uri=http%2 [NE,R=302]

    #uncomment to force https
    #does not currently work
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}

    #forward the requests on to keycloak
    ProxyPreserveHost On    
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    RewriteEngine on

    #Disable HSTS
    Header set Strict-Transport-Security "max-age=0; includeSubDomains;" env=HTTPS

    #change https redirect_uri parameters to http
    RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
    RewriteRule . %1redirect_uri=http%2 [NE,R=302]

    #forward the requests on to keycloak
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    #Leave the items added by certbot alone
    #There should be a ServerName option
    #And a bunch of options to configure the location of the SSL cert files
    #Along with an option to include an additional config file

</VirtualHost>
</IfModule>

Étape 8) Redémarrez Apache. Utilisez sudo systemctl restart httpd (CentOs) ou sudo systemctl restart apache2 (Ubuntu).

Étape 9) Avant que vous puissiez essayer de vous connecter au serveur, puisque nous avons dit à Keycloak d'utiliser http, nous devons configurer une autre méthode de connexion sécurisée. Cela peut être fait soit en installant un service VPN sur le serveur Keycloak, soit en utilisant SOCKS. J'ai utilisé un proxy SOCKS. Pour ce faire, vous devez d'abord configurer la redirection dynamique des ports.

ssh -N -D 9905 user@example.com

Ou le mettre en place via Mastic .

Tout le trafic envoyé au port 9905 sera désormais acheminé en toute sécurité par un tunnel SSH vers votre serveur. Assurez-vous de mettre le port 9905 sur la liste blanche du pare-feu de votre serveur.

Une fois la redirection de port dynamique configurée, vous devez configurer votre navigateur pour qu'il utilise un proxy SOCKS sur le port 9905. Instructions ici .

Étape 10) Vous devriez maintenant être en mesure de vous connecter au portail d'administration de Keycloak. Pour vous connecter au site web, allez à http://127.0.0.1 et le proxy SOCKS vous conduira à la console d'administration. Veillez à désactiver le proxy SOCKS lorsque vous avez terminé, car il utilise les ressources de votre serveur et, s'il est maintenu, votre vitesse d'accès à Internet sera plus lente.

Étape 11) Ne me demandez pas combien de temps il m'a fallu pour comprendre tout ça.

1 votes

C'est la ligne qui a attiré mon attention : #changer les paramètres https redirect_uri en http RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$ RewriteRule . %1redirect_uri=http%2 [NE,R=302] J'utilise nginx mais, dès que j'ai remplacé https par http dans la redirect_uri, cela a fonctionné.

0 votes

Quelqu'un a-t-il les liens mis à jour pour cette réponse ?

0 votes

J'ai réparé les liens que je pouvais réparer, et j'ai tout mis à jour.

9voto

sushilshimpi Points 81

Allez dans la console d'administration de Keycloak > SpringBootKeycloak> Cients>login-app page. Ici dans la section uris valid-redirect ajouter http://localhost:8080/sso/login

Cela aidera à résoudre le problème de l'indirect-uri

13 votes

Le problème est que la console d'administration n'est pas accessible.

0 votes

J'ai eu ce problème après avoir modifié la méthode de Keycloak web-context paramètre

6voto

Mark S Points 1359

Si vous rencontrez ce problème après avoir modifié le chemin d'accès au contexte Keycloak, vous devrez apporter une modification supplémentaire au paramètre de l'url de redirection :

  1. Changement <web-context>yourchange/auth</web-context> retour à <web-context>auth</web-context> dans standalone.xml
  2. Redémarrez Keycloak et accédez à la page de connexion ( /auth/admin )
  3. Connectez-vous et sélectionnez le domaine "Master".
  4. Sélectionnez "Clients" dans le menu latéral
  5. Sélectionnez le client "security-admin-console" dans la liste qui apparaît.
  6. Changez le "Valid Redirect URIs" de /auth/admin/master/console/* à /yourchange/auth/admin/master/console/*
  7. Sauvegarde et déconnexion. Vous verrez à nouveau le message "Invalid redirect url" après vous être déconnecté.
  8. Maintenant, mettez votre changement original <web-context>yourchange/auth</web-context> dans standalone.xml Redémarrez Keycloak et naviguez vers la page de connexion (qui est maintenant /yourchange/auth/admin )
  9. Connectez-vous et profitez

1 votes

Alternativement, vous pouvez modifier la table redirect_uris dans la BD et ajuster les champs de valeur

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X