Ho provato a capire questo per un po’ e non riesco a risolvere questo problema. Sto cercando di integrare Discourse con una configurazione Keycloak per l’autenticazione utilizzando il plugin discourse-openid-connect. Sto eseguendo discourse-docker versione 3.0.1. Al momento, facendo clic sul pulsante di accesso OpenID connect, viene visualizzato questo messaggio in Discourse: “Impossibile recuperare la configurazione dall’identity provider. Riprova.”
Sto migrando a una nuova configurazione di Discourse e la cosa divertente è che Discourse è in grado di raggiungere la schermata di accesso Keycloak utilizzando la mia vecchia istanza Keycloak senza problemi, ma non ci riesce con la mia nuova. Ciò significa che quanto segue dovrebbe essere vero:
- le impostazioni del plugin openid-connect sono sicuramente corrette (copiate dal vecchio Discourse)
- le impostazioni di Keycloak per il client Discourse sono sicuramente corrette (copiate dal vecchio Discourse)
- non ci sono problemi di rete
- non c’è alcun firewall attivo o nulla che blocchi il traffico
Inoltre, ho scoperto che posso eseguire correttamente curl all’URL del documento di discovery per Keycloak dall’istanza Discourse senza problemi. La versione di Keycloak è la stessa della precedente e l’autenticazione Keycloak funziona correttamente per altri strumenti situati nella stessa regione AWS e AZ di Discourse. Di seguito è riportato l’errore dai log quando tento di accedere utilizzando openid-connect.
Ho fatto ricerche e testato così tanto e nulla ha funzionato. L’errore relativo agli IP non consentiti sembra piuttosto generico e sono quasi certo che non ci sia alcun firewall che blocchi nulla, soprattutto perché posso eseguire curl al documento di discovery senza problemi. Posso solo pensare che forse Discourse stia cercando di recuperare il documento da una cache da qualche parte o non stia raggiungendo l’URL del token corretto, ma semplicemente non lo so. Qualsiasi aiuto sarebbe apprezzato.
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)