Ive*_*dea 7 keycloak keycloak-gatekeeper
keycloak 和身份验证的新手,很抱歉遗漏了一些明显的东西,并且没有使用准确的术语。
我正在尝试运行一个与 Java (dropwizard) API 对话的简单 Angular UI。我希望这两个都需要身份验证。我(几乎)能够使用单个领域和机密客户端让它们在 keycloak 和 keycloak 看门人后面正常运行。在这种情况下,gatekeeper 有upstream-url一个 traefik 实例,然后路由到 UI 或 API docker 容器。就像是:
Gatekeeper upstream-url ----> Traefik (my.domain/*) ----> UI (my.domain/ui/*)
\---> API (my.domain/api/*)
Run Code Online (Sandbox Code Playgroud)
这工作正常,直到会话超时,并且当(已加载)UI 页面上的用户单击尝试发送 ajax 请求以命中 API 的按钮时(例如https://my.domain/api/getstuff),然后Gatekeeper 将其重定向(即301)到keycloak 登录页面。这个重定向对于 API 请求来说有点荒谬......
在这一点上,我的 UI 和 API 项目都是身份验证不可知的(即它们还没有运行任何适配器等 - 我现在依靠 docker 设置来防止“直接”访问 UI 和 API。我会一旦我需要了解有关用户的信息,就添加适配器)。我可以在https://www.keycloak.org/docs/latest/securing_apps/index.html#configuration-options中看到autodetect-bearer-only似乎描述我的问题的选项,即
它允许您将 Web 应用程序的未经身份验证的用户重定向到 Keycloak 登录页面,但将 HTTP 401 状态代码发送到未经身份验证的 SOAP 或 REST 客户端,因为他们无法理解重定向到登录页面
但似乎适用于适配器层,即在我的场景中在网守之后。 这似乎也很相似。
我想我希望对https://my.domain/ui/*的未经身份验证(例如从未登录或超时)的访问请求被重定向到 keycloak 登录页面,但是https://my.domain/api/ *到 401。
而从HTTPS://my.domain/ui/somepage Ajax请求到HTTPS://my.domain/api/getstuff使用JWT /令牌/ cookie的浏览器从登录(也就是现在的工作)了。
我该怎么做呢?我错过了什么愚蠢的明显步骤!?
不幸的是,您无法告诉 Gatekeeper 返回 401(403) 响应代码而不是重定向。有类似的问题:https ://issues.jboss.org/browse/KEYCLOAK-11082
您可以做的是完全删除 Gatekeeper,并在前端(JS 适配器)实现公共客户端身份验证,在后端(Java 适配器)实现仅承载客户端。如果您的 Java 应用程序服务于前端,您可以仅实现机密客户端身份验证并为 /api/* 请求返回 401(403) 响应。
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |