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 master
el 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.d
directorio 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 user@example.com
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.