keycloak Parámetro no válido: redirect_uri

83

Cuando intento acceder desde mi api para autenticar al usuario desde keycloak, pero me da un error Parámetro no válido: redirect_uri en la página de keycloak. He creado mi propio reino aparte del maestro. keycloak se ejecuta en http. Por favor, ayúdame.

VIJAY THAKUR
fuente
mientras se revisa a través del elemento de inspección, se muestra un error 500
VIJAY THAKUR
2
No publique la misma pregunta varias veces. Si desea agregar más detalles a su pregunta original, puede hacerlo haciendo clic en 'editar' directamente debajo de su pregunta.
THelper
2
Posible duplicado del parámetro no válido
THelper
1
Verifique https vs http en la URL de redireccionamiento
ThomasRS
1
En mi caso, fue un error tonto: "<dirección IP>" en lugar de "http: // <dirección IP>"
SwissNavy

Respuestas:

54

Lo que funcionó para mí fue agregar wildchar '*' . Aunque para las construcciones de producción, voy a ser más específico con el valor de este campo. Pero para propósitos de desarrollo, puede hacer esto.

ingrese la descripción de la imagen aquí

Configuración disponible en la consola de administración de keycloak -> Realm_Name -> Clientes -> Client_Name .

EDITAR: NO HAGA ESTO EN PRODUCCIÓN. Hacerlo crea una gran falla de seguridad.

tratando de aprender
fuente
13
Esta respuesta puede ser una falla de seguridad peligrosa, al hacerlo, abre la puerta al ataque de redireccionamiento inseguro.
Michael Courcy
No puedo creer que esta respuesta tenga actualmente los mejores votos. Esto está lejos de ser una solución y en realidad solo debería aparecer en los comentarios. Por otro lado, hay muy poca información en la pregunta para siquiera intentar responder.
bsaverino
35

Si usted es un desarrollador de .Net, compruebe a continuación Configuraciones keycloak Opciones de autenticación class set CallbackPath = RedirectUri, // esta propiedad debe configurarse de lo contrario, mostrará un error de redirecti no válido

Me enfrenté al mismo error. En mi caso, el problema era que los URI de redireccionamiento válidos no eran correctos. Entonces estos son los pasos que seguí.

Primero inicie sesión en keycloack como usuario administrador. Luego seleccione su reino (tal vez lo dirija automáticamente al reino). Entonces verá la siguiente pantalla

ingrese la descripción de la imagen aquí

Seleccione Clientes en el panel izquierdo. Luego seleccione el cliente relevante que configuró para su aplicación. De forma predeterminada, estará en la pestaña Configuración , si no la selecciona. Mi aplicación se estaba ejecutando en el puerto 3000, por lo que mi configuración correcta es la siguiente. digamos que tiene una aplicación que se ejecuta en localhost: 3000, por lo que su configuración debería ser así

ingrese la descripción de la imagen aquí

Menuka Ishan
fuente
19

Si recibe este error debido a un nuevo reino que creó

En la URL a la que se le redirige (es posible que tenga que buscar esta URL en las herramientas de desarrollo de Chrome), cambie el dominio por masterel que acaba de crear y, si no lo está usando https, asegúrese de que redirect_uri también lo esté usando http.

Si recibe este error porque está intentando configurar Keycloak en un dominio público (no localhost)

Paso 1) Siga esta documentación para configurar una base de datos MySql. También es posible que deba consultar la documentación oficial .

Paso 2) Ejecuta el comandoupdate REALM set ssl_required = 'NONE' where id = 'master';

Nota: En este punto, técnicamente debería poder iniciar sesión, pero la versión 4.0 de Keycloak está usando https para redireccionar uri a pesar de que simplemente desactivamos el soporte de https. Hasta que Keycloak solucione esto, podemos solucionarlo con un proxy inverso. Un proxy inverso es algo que querremos usar de todos modos para crear fácilmente certificados SSL / TLS sin tener que preocuparnos por los almacenes de claves de Java.

Nota 2: Keycloak ha salido desde entonces con su propio proxy. No he probado esto todavía, pero en este punto, es posible que desee dejar de seguir mis instrucciones y verificar (keycloak gatekeeper) [ https://www.keycloak.org/downloads.html] . Si tiene problemas para configurar Keycloak Gatekeeper, guardaré mis instrucciones para configurar un proxy inverso con Apache.

Paso 3) Instale Apache. Usaremos Apache como proxy inverso (probé NGINX, pero NGINX tenía algunas limitaciones que se interpusieron en el camino). Vea yum instalando Apache (CentOs 7) y apt-get install Apache (Ubuntu 16), o busque las instrucciones para su distribución específica.

Paso 4) Ejecuta Apache

  • Utilice sudo systemctl start httpd(CentOs) o sudo systemctl start apache2(Ubuntu)

  • Utilice sudo systemctl status httpd(CentOs) o sudo systemctl status apache2 (Ubuntu) para comprobar si Apache se está ejecutando. Si ves las palabras en texto verde active (running)o si la última entrada dice Started The Apache HTTP Server., estás bien.

Paso 5) Estableceremos una conexión SSL con el proxy inverso, y luego el proxy inverso se comunicará con keyCloak a través de http. Debido a que esta comunicación http ocurre en la misma máquina, aún estás seguro. Podemos usar Certbot para configurar certificados de renovación automática.

Si este tipo de cifrado no es lo suficientemente bueno y su política de seguridad requiere un cifrado de extremo a extremo, tendrá que averiguar cómo configurar SSL a través de WildFly , en lugar de utilizar un proxy inverso.

Nota: En realidad, nunca pude hacer que https funcionara correctamente con el portal de administración. Quizás esto haya sido un error en la versión beta de Keycloak 4.0 que estoy usando. Se supone que puede configurar el nivel de SSL para que solo lo requiera para solicitudes externas, pero esto no pareció funcionar, por lo que configuramos https en ninguno en el paso 2. De aquí en adelante, continuaremos usando http sobre un túnel SSH para administrar la configuración de administrador.

Paso 6) Siempre que intente visitar el sitio a través de https, activará una política HSTS que forzará automáticamente las solicitudes http para redirigir a https. Siga estas instrucciones para borrar la regla HSTS de Chrome y, por el momento, no vuelva a visitar la versión https del sitio.

Paso 7) Configurar Apache. Primero busque dónde se encuentra su archivo httpd.conf . Su archivo httpd.conf probablemente incluye archivos de configuración de un directorio separado. En mi caso, encontré todo mi archivo de configuración en un conf.ddirectorio ubicado junto a la carpeta en la que estaba el archivo httpd.conf.

Una vez que encuentre sus archivos conf, cambie o agregue las siguientes entradas de host virtual en sus archivos conf. Asegúrese de no anular las opciones SSL ya presentes que fueron generadas por certbot. Cuando termine, su archivo de configuración debería verse así.

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

Paso 8) Reinicie Apache. Utilice sudo systemctl restart httpd(CentOs) o sudo systemctl restart apache2(Ubuntu).

Paso 9) Antes de que tenga la oportunidad de intentar iniciar sesión en el servidor, ya que le dijimos a Keycloak que usara http, necesitamos configurar otro método de conexión segura. Esto se puede hacer instalando un servicio VPN en el servidor de capa de claves o usando SOCKS. Usé un proxy SOCKS. Para hacer esto, primero deberá configurar el reenvío de puertos dinámico.

ssh -N -D 9905 [email protected]

O configúrelo a través de Putty .

Todo el tráfico enviado al puerto 9905 ahora se enrutará de forma segura a través de un túnel SSH a su servidor. Asegúrese de incluir el puerto 9905 en la lista blanca en el firewall de su servidor.

Una vez que haya configurado el reenvío de puerto dinámico, deberá configurar su navegador para usar un proxy SOCKS en el puerto 9905. Instrucciones aquí .

Paso 10) Ahora debería poder iniciar sesión en el portal de administración de Keycloak. Para conectarse al sitio web, vaya a http://127.0.0.1 y el proxy SOCKS lo llevará a la consola de administración. Asegúrese de apagar el proxy SOCKS cuando haya terminado, ya que utiliza los recursos de su servidor, y resultará en una velocidad de Internet más lenta para usted si se mantiene encendido.

Paso 11) No me pregunte cuánto tiempo me tomó darme cuenta de todo esto.

wp-overwatch.com
fuente
1
Esta fue la línea que llamó mi atención: #cambiar los parámetros https redirect_uri a http RewriteCond% {request_uri} \?% {Query_string} ^ (. *) Redirect_uri = https (. *) $ RewriteRule. % 1redirect_uri = http% 2 [NE, R = 302] Estoy usando nginx pero, tan pronto como sustituí el https por http en el redirect_uri, funcionó.
Telmo Dias
9

Vaya a la consola de administración de keycloak> SpringBootKeycloak> Clientes> página de inicio de sesión de la aplicación. Aquí, en la sección uris de redireccionamiento válido, agregue http: // localhost: 8080 / sso / login

Esto ayudará a resolver el problema de uri indirecto

sushilshimpi
fuente
13
El problema es que no se puede acceder a la consola de administración.
SmallChess
Tengo este problema después de modificar la web-contextconfiguración de Keycloak
Mark
5

Si observa este problema después de haber realizado una modificación en la ruta de contexto de Keycloak, deberá realizar un cambio adicional en la configuración de la URL de redireccionamiento:

  1. Cambio <web-context>yourchange/auth</web-context>de nuevo a <web-context>auth</web-context>en standalone.xml
  2. Reinicie Keycloak y navegue hasta la página de inicio de sesión ( /auth/admin)
  3. Inicie sesión y seleccione el reino "Maestro"
  4. Seleccione "Clientes" en el menú lateral
  5. Seleccione el cliente "security-admin-console" de la lista que aparece
  6. Cambiar los "URI de redireccionamiento válidos" de /auth/admin/master/console/*a /yourchange/auth/admin/master/console/*
  7. Guardar y cerrar sesión. Verá nuevamente el mensaje "URL de redireccionamiento no válida" después de cerrar sesión.
  8. Ahora, <web-context>yourchange/auth</web-context>ingrese su cambio original en standalone.xml Reinicie Keycloak y navegue a la página de inicio de sesión (que es ahora /yourchange/auth/admin)
  9. Inicia sesión y disfruta
marca
fuente
1
alternativamente, puede editar la tabla redirect_urisen la base de datos y ajustar los campos de valor
pHiL
4

Inicie sesión en el sitio web de la consola de administración de Keycloak, seleccione el reino y su cliente, luego asegúrese de que todos los URI del cliente tengan el prefijo del protocolo, es decir, http://por ejemplo. Un ejemplo seríahttp://localhost:8082/*

Otra forma de resolver el problema es ver la salida de la consola del servidor Keycloak, ubicar la línea que indica que la solicitud fue rechazada, copiar el redirect_urivalor mostrado y pegarlo en el * Valid Redirect URIscampo del cliente en el sitio web de la consola de administración de Keycloak. El URI solicitado es entonces uno de los aceptables.

Stephane
fuente
2

Me enfrenté al problema del parámetro Invalid: redirect_uri mientras seguía el ejemplo de arranque de primavera y keycloak disponible en http://www.baeldung.com/spring-boot-keycloak . al agregar el cliente desde el servidor keycloak tenemos que proporcionar el URI de redireccionamiento para ese cliente para que el servidor keycloak pueda realizar la redirección. Cuando me enfrenté al mismo error varias veces, seguí copiando la URL correcta de la consola del servidor de capa clave y la proporcioné en el espacio de URI de redireccionamiento válido, ¡y funcionó bien!

Titanes
fuente
2

incluso me enfrenté al mismo problema. Lo rectifiqué yendo al cliente en particular bajo el reino, respectivamente, en él, redireccione la URL agregue * después de su URL completa.

EL PROBLEMA SE RESOLVERÁ

Ejemplo: redireccionar URI: http: localhost: 3000 / myapp / generator / *

usuario12849940
fuente
1

Debe verificar la consola de administración de keycloak para la configuración frontal. Debe estar configurado incorrectamente para redireccionar URL y orígenes web.

boycod3
fuente
1

Si está intentando redirigir a la página de inicio de sesión de keycloak después de cerrar la sesión (como yo), eso no está permitido de forma predeterminada, pero también debe configurarse en la configuración "URI de redireccionamiento válido" en la consola de administración de su cliente.

jschmuecking
fuente
1

Este error también se produce cuando su Usuario no tiene el rol esperado delegado en la definición de Usuario (Establecer rol para el Reino en el menú desplegable).

zhrist
fuente
1

Enfrenté el mismo problema. Lo rectifiqué yendo al cliente en particular bajo el reino, respectivamente, en él, redireccione la URL agregue * después de su URL completa.

contraseña de aadhar
fuente
1

Para mí, faltaba una barra al final /en el valor deValid Redirect URIs

ácido
fuente
0

Su URI de redireccionamiento en su código (keycloak.init) debe ser el mismo que el URI de redireccionamiento configurado en el servidor de Keycloak (cliente -> Uri válido) haga clic para ver la imagen de mi código haga clic para ver mi configuración de keycloak

IkM
fuente
0

Verifique que el valor del parámetro redirect_uri esté en la lista blanca para el cliente que está utilizando. Puede gestionar la configuración del cliente a través de la consola de administración.

El URL de redireccionamiento debe coincidir exactamente con uno de los URL de redireccionamiento de la lista blanca, o puede usar un comodín al final del URL que desea incluir en la lista blanca. Ver: https://www.keycloak.org/docs/latest/server_admin/#_clients

Tenga en cuenta que Keycloak permite el uso de comodines para redirigir uri en la lista blanca, pero en realidad es una violación de la especificación OpenId Connect. Vea la discusión sobre esto en https://lists.jboss.org/pipermail/keycloak-dev/2018-December/011440.html

Arnold Obdeijn
fuente
0

Parece que este problema puede ocurrir si coloca espacios en blanco en el nombre de su Reino. Tenía el nombre configurado Debugging Realmy recibí este error. Cuando me cambié a DebuggingRealmfuncionó.

Todavía puede tener espacios en blanco en el nombre para mostrar. Es extraño que keycloak no verifique esto en la entrada del administrador.

worldsayshi
fuente