Я уже довольно давно пытаюсь разобраться в этом вопросе, но не могу решить проблему. Я пытаюсь интегрировать Discourse с настройками Keycloak для аутентификации, используя плагин discourse-openid-connect. Я использую версию discourse-docker 3.0.1. Сейчас при нажатии кнопки входа через OpenID Connect в Discourse появляется сообщение: «Не удалось получить конфигурацию от провайдера идентификации. Пожалуйста, попробуйте снова».
Я мигрирую на новую настройку Discourse, и самое забавное, что Discourse успешно получает доступ к экрану входа в Keycloak с помощью моего СТАРОГО экземпляра Keycloak, но не может сделать этого с новым. Это означает, что следующее должно быть верным:
- настройки плагина openid-connect точно правильные (скопированы из старого Discourse)
- настройки Keycloak для клиента Discourse точно правильные (скопированы из старого Discourse)
- проблем с сетью нет
- фаервол отключен или ничего не блокирует трафик
Кроме того, я обнаружил, что могу успешно выполнить curl запрос к URL документа обнаружения для Keycloak с экземпляра Discourse. Версия Keycloak такая же, как в старом экземпляре, и аутентификация Keycloak работает корректно для других инструментов, расположенных в том же регионе AWS и зоне доступности, что и Discourse. Ниже приведена ошибка из логов при попытке входа через openid-connect.
Я провел исследования и протестировал множество вариантов, но ничего не сработало. Ошибка о запрещенных IP-адресах кажется довольно общей, и я почти уверен, что фаервол ничего не блокирует, особенно учитывая, что я могу успешно выполнить curl запрос к документу обнаружения. Я могу предположить только, что возможно Discourse пытается получить документ из какого-то кэша или не обращается к правильному URL токена, но я просто не знаю. Любая помощь будет оценена.
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)