español - keycloak tutorial
Keycloak Parámetro no válido: redirect_uri (9)
Si está recibiendo este error debido a un nuevo reino que creó
En la URL a la que se te redirecciona (es posible que debas buscar en las herramientas de desarrollo de Chrome para esta URL), cambia el dominio del master
al que acabas de crear y, si no estás usando https
, asegúrate de que el redirect_uri también esté utilizando 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. Es posible que también necesite consultar la documentación oficial .
Paso 2) Ejecute el comando update 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 usa https para el uri de redireccionamiento, aunque acabamos de desactivar la compatibilidad con https. Hasta que Keycloak solucione esto, podemos solucionarlo con un proxy inverso. Un proxy inverso es algo que desearemos utilizar de todos modos para configurar https fácilmente sin tener que preocuparnos por los almacenes de claves de Java.
Nota 2: Keycloak ha salido con su propio proxy. No he intentado esto todavía, pero en este punto, es posible que desee dejar de seguir mis instrucciones y revisar (keycloak gatekeeper) [ https://www.keycloak.org/downloads.html] . Si tiene problemas para configurar el Keycloak Gatekeeper, mantendré mis instrucciones para configurar un proxy inverso con Apache.
Paso 3) Instale Apache. Usaremos Apache como un proxy inverso (probé NGINX, pero las limitaciones de NGINX me impidieron usarlo). Vea yum instalando Apache (CentOs 7), y apt-get install Apache (Ubuntu 16), o encuentre instrucciones para su distribución específica.
Paso 4) Ejecutar Apache
- Use
sudo systemctl start httpd
(CentOs) osudo systemctl start apache2
(Ubuntu) para ver si Apache ya se está ejecutando. Si la última entrada dice:Started The Apache HTTP Server.
entonces tu bien - Use
sudo systemctl start httpd
(CentOs) osudo systemctl start apache2
(Ubuntu) para iniciar Apache.
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 está sucediendo en la misma máquina, todavía estás seguro. Podemos utilizar Certbot para configurar certificados de renovación automática.
Si el cifrado del lado del cliente no es lo suficientemente bueno y su política de seguridad requiere un cifrado de extremo a extremo, deberá averiguar cómo configurar SSL a través de WildFly , en lugar de usar un proxy inverso.
Nota: en realidad, nunca pude hacer que https funcionen correctamente con el portal de administración. Quizás esto podría haber sido un error en la versión beta de Keycloak 4.0 que estoy usando. Se supone que debe poder configurar el nivel SSL para que solo lo requiera para solicitudes externas, pero esto no parece funcionar, por lo que configuramos https a ninguno en el paso # 2. A partir de aquí continuaremos utilizando http a través de un túnel SSH, pero necesitamos la configuración del certificado SSL para nuestros puntos finales.
Paso 6) Cada vez que intente visitar el sitio a través de https, activará una política de HSTS que forzará automáticamente las solicitudes http para redirigir a https. Siga estas instrucciones para borrar la regla HSTS de Chrome y, de momento, no vuelva a visitar la versión https del sitio.
Paso 7) Configurar Apache. Primero encuentre dónde se encuentra su archivo httpd.conf . Su archivo httpd.conf probablemente incluye archivos de un directorio separado. En mi caso, encontré todo mi archivo de configuración en un directorio conf.d
ubicado junto a la carpeta donde 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 existentes que generó certbot. Cuando termines, tu 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. Use 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 keycloak, o usando SOCKS. Utilicé un proxy SOCKS. Para hacer esto, primero deberá configurar el reenvío dinámico de puertos.
ssh -N -D 9905 [email protected]
O configurarlo 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 en la lista blanca el puerto 9905 en el servidor de seguridad de su servidor.
Una vez que haya configurado el reenvío de puertos dinámico, deberá configurar su navegador para usar un proxy SOCKS en el puerto 9905. Aquí encontrará las instrucciones .
Paso 10) Ahora debería poder iniciar sesión en el sitio web ahora. 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 desactivar el proxy SOCKS cuando termine, ya que utiliza los recursos de su servidor y, si se mantiene, la velocidad de Internet será más lenta para usted.
Paso 11) No me preguntes cuánto tiempo me tomó resolver todo esto.
cuando intento golpear desde mi api para autenticar al usuario desde keycloak, pero me está dando un parámetro no válido: redirect_uri en la página keycloak. He creado mi propio reino aparte de maestro. keycloak se está ejecutando en http. Por favor, ayúdame.
Debe verificar la configuración de la consola de administración de keycloak. Debe configurarse incorrectamente para redireccionar la URL y los orígenes web.
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, con http://
por ejemplo. Un ejemplo sería http://localhost:8082/*
Otra forma de resolver el problema es ver la salida de la consola del servidor de Keycloak, ubicar la línea que indica que se rechazó la solicitud, copiar el valor mostrado redirect_uri
y pegarlo en el campo * Valid Redirect URIs
del cliente en la consola de administración de Keycloak sitio web. El URI solicitado es entonces uno de los aceptables.
Lo que funcionó para mí fue agregar wildchar ''*'' . Aunque para las compilaciones de producción, voy a ser más específico con el valor de este campo. Pero para propósitos de desarrollo puedes hacer esto.
Configuración disponible bajo, keycloak admin console -> Realm_Name -> Cients -> Client_Name .
EDITAR: No recomendaría la solución anterior para las compilaciones de producción ya que esto podría llevar a una falla de seguridad.
Me enfrenté al mismo error. En mi caso, el problema era que los URI de redirección válidos no eran correctos. Así que estos son los pasos que seguí.
Primero inicie sesión en keycloack como usuario administrador. Luego, seleccione su reino (tal vez se auto-dirija al reino). A continuación verás la siguiente pantalla.
Seleccione Clientes desde el panel izquierdo. Luego seleccione el cliente relevante que configuró para su aplicación. Por defecto, estarás en la pestaña Configuración , si no la seleccionas. 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 como esta
Me enfrenté al parámetro No válido: problema de redirect_uri al seguir el ejemplo de arranque y keycloak de primavera disponible en http://www.baeldung.com/spring-boot-keycloak . Al agregar el cliente desde el servidor de Keycloak, tenemos que proporcionar el URI de redireccionamiento para ese cliente para que el servidor de Keycloak pueda realizar la redirección. Cuando me enfrenté al mismo error varias veces, seguí copiando la URL correcta desde la consola del servidor keycloak y proporcioné el espacio válido de Redirect URI y ¡funcionó bien!
Si está utilizando el flujo de código de autorización, el parámetro de consulta response_type
debe ser igual al code
. Consulte https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html
Si está viendo 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:
- Cambie
<web-context>yourchange/auth</web-context>
nuevo a<web-context>auth</web-context>
en standalone.xml - Reinicie Keycloak y navegue a la página de inicio de sesión (
/auth/admin
) - Inicia sesión y selecciona el reino "Maestro".
- Selecciona "Clientes" del menú lateral.
- Seleccione el cliente "security-admin-console" de la lista que aparece
- Cambie los "URI de redirección válidos" de
/auth/admin/master/console/*
a/yourchange/auth/admin/master/console/*
- Guardar y cerrar sesión. Volverá a ver el mensaje "URL de redirección no válida" después de cerrar la sesión.
- Ahora, ponga su cambio original
<web-context>yourchange/auth</web-context>
en standalone.xml Reinicie Keycloak y vaya a la página de inicio de sesión (que ahora es/yourchange/auth/admin
) - Inicia sesión y disfruta.
Vaya a la consola de administración keycloak> SpringBootKeycloak> Cients> página de inicio de sesión. Aquí, en la sección de uris de redirección válida, agregue http://localhost:8080/sso/login
Esto ayudará a resolver el problema de uri indirecto.