【问题标题】:How to configure OpenShift router for KeyCloak?如何为 KeyCloak 配置 OpenShift 路由器?
【发布时间】:2020-05-26 16:37:49
【问题描述】:

我在 OpenShift 中创建了两个项目。

browser ---> apps/router ---> apps/gw ---> apps
   \                                \
    \                        (/auth) \---> kc/router ---> kc
     \                                     ^
      \-----------------------------------/
           (kc login page)

第一个项目(apps)包含一个微服务应用程序,还有一个使用 Netflix Zuul 代理实现的网关。第二个项目 (kc) 有一个正在运行的 KeyCloak 实例,也可以通过配置的路线从外部访问。

apps 中的

Zuul 代理有一条从 /authkc/auth 的路由。

UI 使用 KeyCloak 适配器进行身份验证。当我调用 apps/ui 时,SPA 被获取,我被重定向到 apps/auth 进行身份验证。给出用户名/密码后,我应该被重定向回 UI,但它不起作用。我收到一个错误页面,其中的 URL 指向 kc。在 KeyCloak 日志中,我得到以下条目:

10:15:24,969 WARN [org.keycloak.events] (default task-2) type=LOGIN_ERROR, realmId=NUSS, clientId=null, userId=null, ipAddress=10.3.47.12, error=invalid_code

我从 KeyCloak 文档中发现代理配置一定有问题。当我调用 apps/auth/realms/master/.well-known/openid-configuration 时,所有 URL 都指向 kc。在有关代理配置的文档部分中,它说此响应实际上应该包含指向 apps 的 URL。

我认为在 kc 中配置的到 KeyCloak 的路由将 x-forwarded-host 标头和其他代理标头替换为 kc 而不是只需在 apps 中设置已设置的标头即可。我已经验证离开 Zuul 代理的请求包含正确的代理转发标头。

我现在有几个问题:

  • 我必须做什么才能让 KeyCloak 在单独的项目中工作?
  • 我的分析是否正确?
  • 如何最终配置 kc 中的路由以不替换代理标头?
  • 最终是否有最佳做法?

【问题讨论】:

    标签: openshift keycloak netflix-zuul


    【解决方案1】:

    我设法让它工作。但我确实必须安装自定义路由器配置 (Deploying a Customized HAProxy Router)。我配置了 x-forwarded-hostx-forwarded-port 标头在通过路由器时保持不变(如果存在)。

      # preserve X-Forwarded-Host Header if already set
      acl no_xhost res.hdr(X-Forwarded-Host) -m len 0
      http-request set-header X-Forwarded-Host %[req.hdr(host)] if no_xhost
    
      # preserve X-Forwarded-Port Header if already set
      acl no_xport res.hdr(X-Forwarded-Port) -m len 0
      http-request set-header X-Forwarded-Port %[dst_port] if no_xport
    

    我还必须在 Zuul 配置中设置以下属性。

    zuul.add-proxy-headers=true
    

    我想知道为什么默认路由器配置确实会覆盖标头。 一般来说,我会说,如果请求通过各种反向代理,则在传递它们时不应更改代理标头。否则链末端的服务永远无法知道原始请求使用了哪个 URL。对吧?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-29
      • 2018-02-28
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 2023-03-11
      相关资源
      最近更新 更多