我尝试了很长时间,但似乎无法解决这个问题。我正在尝试使用 discourse-openid-connect 插件将 discourse 与 Keycloak 设置集成以进行身份验证。我正在运行 discourse-docker 版本 3.0.1。现在,当单击 OpenID Connect 登录按钮时,discourse 中会弹出此消息:“无法从身份提供者获取配置。请重试。”
我正在迁移到一个新的 discourse 设置,有趣的是,discourse 可以使用我的旧 keycloak 实例正常连接到 Keycloak 登录屏幕,但无法连接到我的新实例。这意味着以下情况应该是正确的:
- openid-connect 插件设置绝对正确(从旧 discourse 复制而来)
- discourse 客户端的 keycloak 设置绝对正确(从旧 discourse 复制而来)
- 没有网络问题
- 没有防火墙或任何阻止流量的内容
此外,我发现我可以成功地从 discourse 实例 curl keycloak 的发现文档 URL。Keycloak 版本与旧版本相同,并且 keycloak 身份验证对于位于同一 AWS 区域和可用区中的其他工具来说工作正常。下面是我尝试使用 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)