Tenho tentado resolver este problema há algum tempo e não consigo. Estou tentando integrar o Discourse com uma configuração Keycloak para autenticação usando o plugin discourse-openid-connect. Estou executando a versão 3.0.1 do discourse-docker. No momento, ao clicar no botão de login do OpenID connect, esta mensagem aparece no Discourse: “Incapaz de buscar configuração do provedor de identidade. Por favor, tente novamente.”
Estou migrando para uma nova configuração do Discourse, e o engraçado é que o Discourse consegue alcançar a tela de login do Keycloak usando minha antiga instância Keycloak sem problemas, mas não consegue com a nova. Isso significa que o seguinte deve ser verdade:
- As configurações do plugin openid-connect estão definitivamente corretas (copiadas do antigo Discourse)
- As configurações do Keycloak para o cliente Discourse estão definitivamente corretas (copiadas do antigo Discourse)
- Não há problema de rede
- Não há firewall ou algo bloqueando o tráfego
Adicionalmente, descobri que consigo fazer curl na URL do documento de descoberta para o Keycloak a partir da instância do Discourse sem problemas. A versão do Keycloak é a mesma da antiga e a autenticação do Keycloak funciona bem para outras ferramentas localizadas na mesma região AWS e AZ que o Discourse. Abaixo está o erro dos logs quando tento fazer login usando o openid-connect.
Pesquisei e testei muito e nada funcionou. O erro sobre IPs não permitidos parece bastante genérico, e tenho quase certeza de que não há firewall bloqueando nada, especialmente porque consigo fazer curl no documento de descoberta sem problemas. Só consigo pensar que possivelmente o Discourse está tentando buscar o documento de algum cache ou não está atingindo a URL de token correta, mas simplesmente não sei. Qualquer ajuda seria 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)