【发布时间】: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 代理有一条从 /auth 到 kc/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