问题标签 [louketo-proxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
977 浏览

keycloak - keycloak 网守不会阻止任何请求

我正在尝试在个人 api: 中使用 keycloak + keycloak-gatekeeper 进行授权api.mydomain.com。到目前为止,我已经完成了:

  1. 在 keycloak 中创建了一个领域MY-REALM,keycloak 的 URL 是https://auth.mydomain.com
  2. confidential client在同一领域中创建了一个Authorization Enabled ONValid redirect URIShttps://api.mydomain.com/ *
  3. 创建了一个用户
  4. 在我的服务器内部https://api.mydomain.com指向 127.0.0.1:5000
  5. 127.0.0.1:5001 是“真正的 API”
  6. 使用此 config.yaml 配置 keycloak-gatekeeper:

现在,如果我在浏览器https://api.mydomain.com中访问,我将被重定向到https://auth.mydomain.com,要求输入用户名和密码。我提供在第 3 点创建的用户,并按预期再次重定向到https://api.mydomain.com。到目前为止,一切都很好。

问题在于授权部分的配置:在 keycloak -> Clients-> <MY-API-CLIENT-ID>-> Authorization->Resources我编辑默认策略以拒绝resource /*中的每个请求,但我可以访问https://api 中的每个资源(URL)。 mydomain.com和以前一样。

我努力了:

  1. 按领域角色限制(只有管理员可以访问特定资源)。
  2. 受范围限制。
  3. 否定策略中的逻辑。
  4. 受客户角色限制。
  5. 祈祷。
  6. 哭。

当然,我已经Evaluate在 keycloak 的 Tab 中尝试了上述所有组合,并且在此处有效地模拟了策略显示DENY

那么我做错了什么?顺便说一句,在每次请求之后,这是来自 keycloak-gatekeeper 的日志:

任何想法将不胜感激。

0 投票
1 回答
4693 浏览

keycloak - keycloak 网守中重定向 url 的目的是什么?

我正在尝试将 Keycloak Gatekeeper 设置为我的服务前的反向代理,但我不知道redirection-url. 我想我可以把 Gatekeeper 放在我的服务前面,而我的服务不需要知道任何关于 authn/z 的信息。如果需要回调端点,这似乎是不可能的。

我能够部署 Keycloak Server、Keycloak Gatekeeper 和一个简单的节点服务(全部部署在本地 docker 容器中)。通过对我的主机文件进行一些黑客攻击,我能够向 Gatekeeper 发送一个请求,它正确地对我进行身份验证并将我重定向回我的节点服务。但是,我的节点服务需要添加一个/oauth/callback端点,因为 Gatekeeper 将该后缀添加到redirection-url.

这是我的 Gatekeeper 配置的样子:

我希望能够将 Gatekeeper 放在不了解身份验证、授权、OIDC 等的服务前面,但这redirection-url似乎是不可能的。

有没有办法让 Gatekeeper 在需要时进行 authnz 并在用户通过正确身份验证时充当简单的代理?或者有什么我不明白的地方这是不可能的吗?

0 投票
2 回答
2623 浏览

keycloak - 在后端 API 前使用 Keycloak Gatekeeper

在 DOMAIN 上运行的单页应用程序 (SPA) 上,对 DOMAIN/graphql 的调用被重新路由到后端。前端和后端都通过 Keycloak Gatekeeper 实例进行保护。

这个想法是前端和后端共享kc-access令牌。

现在,访问令牌在后端 Gatekeeper 中过期。如果 SPA 在浏览器中刷新,则前端将重新路由到 Keycloak,并且需要新的访问令牌。但是,如果没有刷新,当令牌过期时,对 DOMAIN/graphql 的 POST 请求会失败并返回 307 状态码。浏览器不知道如何处理。浏览器日志记录提供"{"error":"RESTEASY003065: Cannot consume content type"}". 如果 POST 的内容类型标头被删除,则错误为“未提供 client_id”,而 client_id 包含在查询字符串中。

将 POST 请求重定向到 Keycloak 可能不是最好的解决方案。如果后端刷新其访问令牌本身,则更清洁。

这就是我们通过将会话状态存储添加到后端的 Gatekeeper 来尝试的。我们正在使用以下配置:

这确实在 Gatekeeper 中创建了一个 /boltdb 文件,但它似乎没有被使用,因为该文件没有更改。

后端的 Gatekeeper 提供以下日志记录:

所以我们“无法找到用户的刷新令牌”,因为根据日志记录“没有找到会话状态”。

有人知道如何启用令牌刷新吗?

0 投票
0 回答
204 浏览

angular - 在 Angular 应用程序中保留标题

我正在开发一种架构,其中我的 Angular 前端连接到 Spring Boot 后端,并且前端可以通过 NGINX 访问。

在访问我的应用程序之前,必须对用户进行身份验证。

我使用 Keycloak 作为身份管理器,使用 keycloak-gatekeeper 作为代理 oauth,验证用户是否经过身份验证。

成功验证后,网守重定向(并发送带有身份信息的标头,例如:用户名、电子邮件、角色......)到我的前面,这是一个调用 spring boot API 以根据登录的用户检索信息的单个页面和它的作用。

问题是:API 没有收到 Gatekeeper 发送的任何这些标头。

我做了几个测试以知道我在哪里丢失了标头,我发现当我将 Gatekeeper 直接与 API 连接时,API 接收所有标头但是当我在两者之间添加角度应用程序时,后端仅接收标准标头,例如:主机,x-real-ip,x-forwarded-for,访问控制允许来源...)

似乎前面生成了一个新请求 - 带有默认标头 - 到后面并丢失了其他标头。

我如何保留这些标头以便我的 API 接收它们?

这是我的架构的图片:

建筑学

谢谢大家的帮助

0 投票
1 回答
1341 浏览

kubernetes - keycloak/louketo 网守——不会自动重定向到 keycloak 登录

我正在将网守/louketo 设置为浏览器应用程序的反向代理。我将代理部署为 kubernetes pod 中的 sidecar,在同一集群中的其他地方使用 keycloak(但通过公共 URL 访问)。Gatekeeper 位于 nginx 入口的后面,该入口执行 tls 终止。

[我已经尝试过最新的 louketo 版本和 fork oneconcern/keycloak-gatekeeper。有些差异,但问题是一样的,所以我认为这是我的配置的问题。]

网守,无论我如何设置配置,都会读取我领域的发现 url,但不会在登录时重定向。相反,它使用/oauth/authorize路径重定向到我的上游应用程序。我可以手动强制我的应用程序再次重定向到 keycloak,但是从 keycloak 返回时,网守无法识别 cookie,并在重定向循环中捕获我。

似乎我犯了一些简单的配置错误,但我已经为此工作了两天,而且我束手无策。(甚至对 go 代码进行了额外的调试,但还没有对其进行足够的研究以真正知道它在做什么。)

我的配置(尝试了许多不同变体的最佳猜测):

入口服务https://dev.my-domain.com并路由到端口 4000,这是身份验证代理边车。它使用 let-encrypt 证书设置,并终止 tls。我不在代理中使用 tls(我应该吗?)。端口 3000 的上游应用程序。Keycloak 位于 auth.my-domain.com。在auth-proxy-keycloak-config.yaml我有加密密钥和client_id。keycloak 客户端是为公共访问和标准流程设置的(因此我认为不需要 client_secret)。我已经摆弄了各种 uri 设置,并且还为 CORS 输入了 web origins "*" 以进行测试。

当我在浏览器中尝试受保护的 url 时,我看到:

在代理日志中,它会将我重定向到 /oauth/authorize,而不是https://auth.my-domain.com/auth/realms/my-realm/protocol/openid-connect/auth我认为它应该重定向我的位置。

更新——正如@jan-garaj 在评论中指出的那样,/oauth/*不应该被列入白名单。(我从对其他人答案的一个可能错误的解释中得到了这一点。)然后我不得不使 cookie 不是 http-only,最后解决了这个问题 - Keycloak-gatekeeper: 'aud' claim and 'client_id' do not match。 ..之后它的工作原理!

0 投票
0 回答
74 浏览

keycloak - Keycloak 自定义身份验证

我是 Keycloak 的新手,现在我尝试添加自定义身份验证器,我只是从链接此 url 获取源代码并构建 jar 并部署在 keyclaok jboss 部署文件夹中添加尝试添加到提供程序文件夹下。

但是 keycloak 服务器没有在 keycloak 的身份验证流程中显示我的自定义身份验证器。

截图-1

截图-2

任何人请帮助我

0 投票
1 回答
280 浏览

jwt - Keycloak 如何在新的浏览器窗口中确定用户?

我试图理解以下问题:

有:

  • app1.gatekeeper-test.com
  • app2.other-url.com

这两个客户端(app1,app2)在同一个领域(受 2 个关守保护)都指向同一个资源服务器 - Cookie 是全范围的。

  1. user1app1.gatekeeper-test.com.
  2. app2.other-url.com在一个新选项卡中打开它会自动将我登录为user1.
  3. 如果我app1.gatekeeper-test.com在私人窗口中打开,我需要再次登录。
  4. 没有什么是全局范围的,我找不到 keycloak 如何确定用户的原因。

这怎么可能?必须有一些前端状态机制让 Keycloak 知道,这是user1,它正在尝试访问 app2?我很困惑......(在 Chrome 80.0.3987.87 上测试)

0 投票
1 回答
329 浏览

keycloak - 无法通过 ajax 请求调用受 Gatekeeper-keycloak 保护的 Web 服务

我有受网守(louketo-proxy)保护的网络服务。当我通过 ajax 请求调用受保护的服务时,它不会将我重定向到登录页面。它向我显示消息“跨域请求被阻止:同源策略不允许在http://127.0.0.1:3000/app-name/api/getSession读取远程资源。(原因:CORS 标头 'Access-Control-Allow -原点缺失)。”

下面是网守配置文件:

我使用的 Keycloak 版本是 10.0.2

在此处输入图像描述

0 投票
1 回答
88 浏览

keycloak - 无法从应用程序加载 keycloak 身份验证页面,使用 ajax 请求调用受保护资源

我已经为 IAM 配置了 keycloak,并使用网守作为代理。当我通过 ajax 请求从我的 Angular 应用程序调用受保护资源时,它不会将我重定向到 keycloak 的登录页面,尽管在浏览器请求中调用它显示我请求登录页面。任何帮助将非常感激。

在此处输入图像描述