He estado intentando resolver esto durante un tiempo y no parece que pueda solucionar este problema. Estoy intentando integrar Discourse con una configuración de Keycloak para la autenticación utilizando el plugin discourse-openid-connect. Estoy ejecutando discourse-docker versión 3.0.1. Ahora mismo, al hacer clic en el botón de inicio de sesión de OpenID connect, aparece este mensaje en Discourse: “No se puede obtener la configuración del proveedor de identidad. Inténtalo de nuevo”.
Estoy migrando a una nueva configuración de Discourse, y lo curioso es que Discourse puede acceder a la pantalla de inicio de sesión de Keycloak utilizando mi antigua instancia de Keycloak sin problemas, pero no puede hacerlo con la nueva. Esto significa que lo siguiente debería ser cierto:
- La configuración del plugin openid-connect es definitivamente correcta (copiada del antiguo Discourse).
- La configuración de Keycloak para el cliente de Discourse es definitivamente correcta (copiada del antiguo Discourse).
- No hay ningún problema de red.
- No hay ningún firewall activado ni nada que bloquee el tráfico.
Además, he descubierto que puedo hacer curl a la URL del documento de descubrimiento para Keycloak desde la instancia de Discourse sin problemas. La versión de Keycloak es la misma que la antigua, y la autenticación de Keycloak funciona bien para otras herramientas ubicadas en la misma región de AWS y AZ que Discourse. A continuación, se muestra el error de los registros cuando intento iniciar sesión usando openid-connect.
He investigado y probado muchas cosas y nada ha funcionado. El error sobre las IP no permitidas parece bastante genérico, y estoy casi seguro de que no hay ningún firewall que bloquee nada, especialmente porque puedo hacer curl al documento de descubrimiento sin problemas. Solo se me ocurre que posiblemente Discourse esté intentando obtener el documento de una caché en algún lugar o no esté accediendo a la URL de token correcta, pero simplemente no lo sé. Cualquier ayuda sería apreciada.
Started GET "/session/csrf" for <my_ip> at 2023-02-01 18:02:24 +0000
Processing by SessionController#csrf as JSON
Completed 200 OK in 2ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 406)
Started POST "/auth/oidc" for 10.158.133.85 at 2023-02-01 18:02:24 +0000
(oidc) Setup endpoint detected, running now.
OIDC Log: Fetching discovery document from https://<keycloak_URL>.com/auth/realms/<my_realm>/.well-known/openid-configuration
OIDC Log: Fetching discovery document raised error Faraday::ConnectionFailed FinalDestination: all resolved IPs were disallowed
OIDC Log: Discovery document is
---
(oidc) Request phase initiated.
(oidc) Authentication failure! openid_connect_discovery_error: OmniAuth::OpenIDConnect::DiscoveryError, Discovery document is missing
Started GET "/auth/failure?message=openid_connect_discovery_error&strategy=oidc" for <my_ip> at 2023-02-01 18:02:24 +0000
Processing by Users::OmniauthCallbacksController#failure as HTML
Parameters: {"message"=>"openid_connect_discovery_error", "strategy"=>"oidc"}
Rendered users/omniauth_callbacks/failure.html.erb within layouts/no_ember (Duration: 0.1ms | Allocations: 17)
Rendered layout layouts/no_ember.html.erb (Duration: 17.3ms | Allocations: 5113)
Completed 200 OK in 24ms (Views: 19.7ms | ActiveRecord: 0.0ms | Allocations: 6610)