相关疑难解决方法(0)

Apache反向代理背后的密钥斗篷

我在Google上冲浪时未找到任何具体答案或示例,因此请在这里再次尝试运气(通常会很幸运)。

问题

  • 我在apache反向代理后面运行着一个单一的spring boot RESTful服务。此RESTful服务仅运行HTTP。假设它在本地ip 172.s端口8080上运行。

  • 我还配置了一个Apache反向代理。假设它在本地IP 172.a和公共IP 55.a上运行。该代理同时响应两个端口80,但是所有HTTP通信都会自动重定向到443。

  • 我有另一台运行独立Keycloak服务器的服务器。另外,该服务器还配置为可通过反向代理进行公共访问。假设它在本地ip 172.k上运行。此Keycloak服务器仅在HTTP上运行。通过反向代理使用SSL处理HTTP请求。

  • 最后,我在本地ip 172.f上运行了另一个frontend-webapp。该前端Webapp在Nodejs下运行,并且还通过反向代理进行配置。它也仅运行HTTP,但是客户端(浏览器)通过反向代理使用SSL,就像Keycloak和RESTful服务一样。该前端正在使用RESTful服务,并且还配置为使用keycloak javascript适配器进行身份验证。

  • 使用Spring Boot Keycloak适配器将RESTful服务配置为仅承载,而将前端应用程序配置为公共访问类型。

RESTful服务服务器,Keycloak服务器和前端服务器不能公共访问;它们只能通过反向代理访问。但是它们可以彼此通信(因为它们在同一个专用网络中)。

在前端keycloak.json文件中,将auth-server-url设置为代理url https://example.com/auth,前端就能成功获取有效令牌。现在,当我尝试使用RESTful服务时,我在RESTful适配器中收到错误消息,令牌发行者无效。当然,在http标头中,我正在发送Authorization: Bearer <token>。我收到此错误的原因是,在RESTful keycloak配置中,我已配置,auth-server-url以使用本地url http://172.k:9080/auth,因此此url与令牌中的url不同(即https://example.com/auth)。

我不能auth-server-url在RESTful服务中包括与前端相同的内容,因为这将要求我也在RESTful服务上设置HTTP(因为url为https),这会使事情变得非常复杂,包括需要设置证书和像这样的东西。另外,我认为在仅本地服务器上设置SSL效率不高且不切实际。

所以我的问题是,如何使适配器与Keycloak对话而不通过反向代理。我希望RESTful适配器与Keyclok服务器进行对话,以通过进行令牌验证auth-server-url: http://172.k:9080/auth

之前有一个用于后端的不同URL,已被删除:https : //issues.jboss.org/browse/KEYCLOAK-2623

reverse-proxy keycloak

8
推荐指数
2
解决办法
7630
查看次数

docker 网桥模式下的 Keycloak 授权:如何访问 localhost?

应用程序上下文是一个带有 mongo db 的 node js 应用程序,使用 keycloak 服务器进行具有开放 ID 的授权。对于开发环境,我们有一个 mongo 容器、一个 keycloak 容器和应用服务器容器。

Keycloak 容器在 8080 上有一个端口映射,以便我可以访问http://localhost:8080.

应用程序容器在 9000 上有一个端口映射来访问应用程序本身 http://localhost:9000

所有 3 个容器都在一个 docker 网络中application_default(从 docker compose 开始)。

在应用程序内部,使用 keycloak 进行 openid 身份验证所需的信息由以下环境变量管理:

# KEYCLOAK CREDENTIALS
APP_KEYCLOAK_REALM="http://localhost:8080/auth/realms/myrealm"
APP_KEYCLOAK_RETURN_URL="http://localhost:9000/api/auth/openid/return"
APP_KEYCLOAK_CLIENT_ID=myapplication
APP_KEYCLOAK_CLIENT_SECRET="00d5c908-eade-4e26-bcf0-b9341ghie197"
Run Code Online (Sandbox Code Playgroud)

这些设置不起作用,通常实际上就像在应用程序容器内部一样, 的APP_KEYCLOAK_REALMlocalhost:8080不是指我的 PC(和 keycloak),而是指应用程序容器。

现在当我替换为

APP_KEYCLOAK_REALM="http://keycloak:8080/auth/realms/myrealm"
Run Code Online (Sandbox Code Playgroud)

该应用程序可以转到 keycloak,但是为​​了进行身份验证,我的浏览器被卡住了,试图将我重定向到一个对他来说没有任何意义的 url 开始 http://keycloak:8080/auth/realms...

我设法使配置正常工作的唯一方法是将我的 PC 的实际 IP 地址放在环境文件中:

# KEYCLOAK CREDENTIALS
APP_KEYCLOAK_REALM="http://192.168.1.34:8080/auth/realms/myrealm"
APP_KEYCLOAK_RETURN_URL="http://192.168.1.34:9000/api/auth/openid/return"
APP_KEYCLOAK_CLIENT_ID=myapplication
APP_KEYCLOAK_CLIENT_SECRET="00d5c908-eade-4e26-bcf0-b9341ghie197"
Run Code Online (Sandbox Code Playgroud)

这有效,但似乎不是可移植性的理想选择(IP 地址一直在变化)。

有没有标准的方法来做到这一点?可以将 docker dns …

docker keycloak docker-networking

8
推荐指数
1
解决办法
1481
查看次数

dockerized 环境中的 Keycloak 和 Spring Boot Web 应用程序

考虑以下环境:

  • 一个 docker 容器是 keycloak
  • 另一个 docker 容器是我们的 Web 应用程序,它使用 keycloak 进行身份验证

Web 应用程序是应用了“keycloak-spring-boot-starter”的 Spring Boot 应用程序。在 application.properties 中:

keycloak.auth-server-url = http://localhost:8028/auth

访问我们的 Web 应用程序的用户将使用 keycloak docker 容器的公开端口的 URL 重定向到 keycloak。登录在 keycloak 中没有问题,并且用户(浏览器)再次重定向到我们的 Web 应用程序。现在,需要将授权代码交换为访问令牌。因此,我们的 Web 应用程序(keycloak 客户端)尝试连接到keycloak.auth-server-url 中配置的相同主机和端口。但这是一个问题,因为 Web 应用程序驻留在 docker 容器中而不是主机上,因此它应该访问http://keycloak:8080keycloak是链接的 keycloak docker 容器的内容。

所以问题是:如何配置 keycloak 客户端来为浏览器重定向和访问令牌端点应用不同的 URL?

spring oauth-2.0 docker spring-boot keycloak

6
推荐指数
1
解决办法
3571
查看次数