当前位置: 首页 > 知识库问答 >
问题:

apache反向代理背后的Keycloak

储臻
2023-03-14

我在谷歌上冲浪,没有找到任何具体的答案或例子,所以再次尝试我的运气在这里(经常是幸运的)。

问题所在

>

  • 我在apache反向代理后面运行了一个spring boot RESTful服务。此RESTful服务只运行HTTP。假设它运行在本地IP172.S端口8080上。

    我还配置了一个apache反向代理。假设它运行在本地IP172.a和公共IP55.a上。该代理响应两个端口80,但所有HTTP通信量都自动重定向到443。

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

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

    RESTful服务使用Spring Boot Keycloak适配器配置为只承载,而前端应用程序配置为访问类型public。

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

    在frontend keycloak.json文件中,auth-server-url被设置为代理urlhttps://example.com/auth,并且frontend能够成功地获得有效的令牌。现在,当我尝试使用RESTful服务时,我在RESTful适配器中得到一个错误,即令牌颁发者无效。当然,在http-header中,我发送Authorization:Bearer 。出现此错误的原因是,在RESTful keycloak配置中,我将auth-server-url配置为使用本地urlhttp://172.k:9080/auth,因此此url与令牌中的url不同(即https://example.com/auth)。

    问题

    我不能在RESTful服务中包含与前端相同的auth-server-url,因为这将要求我也在RESTful服务上设置HTTPs(因为该url是HTTPs),这将使事情变得非常复杂,包括需要设置证书之类的东西。另外,我认为只在本地服务器上设置SSL效率低,也不实用。

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

    之前,后端有一个不同的url被删除:https://issues.jboss.org/browse/keycloak-2623

  • 共有1个答案

    壤驷泓
    2023-03-14

    我在docker容器中的一个项目中使用Keycloak。我有同样的问题,但在一个本地网络(所以也许这将不是解决办法,在这种情况下,我很抱歉)。所以情况是这样的:

    >

  • 在wildfly上运行的REST java webapp,在单个Docker容器中
  • KeyCloak运行在上一个
  • 的同一网络中的单个Docker容器中
  • Apache在Docker之外的机器上本地运行,提供一个angular 2应用程序,具有正确的配置

    angular 2应用程序的适配器指向url http://aaa.auth.com(我用条目127.0.0.1aaa.auth.com修改了本地文件主机)

  •  类似资料:
    • 我在服务器上安装了keycloak standanlone,并尝试通过Nginx在反向代理后面使用它。Keycloak绑定到127.0.0.1

    • null 这起作用了,当调用https://www.website.com/auth/oauth/authorizeendpoint时,我将在https://www.website.com/auth/login上重定向,并看到我的登录表单。 问题是没有加载jquery或css这样的资源,因为它试图通过URL https://www.website.com/resources/jquery.min.

    • 主要内容:1. 简单的反向代理,2. 集群和平衡器,3. Balancer和BalancerMember配置,3. 故障转移,4. 均衡器管理器除了作为“基本”Web服务器,并为最终用户提供静态和动态内容之外,Apache httpd(以及大多数其他Web服务器)也可以充当反向代理服务器,也称为“网关” “服务器。 在这种情况下,httpd本身不生成或托管数据,而是由一个或多个后端服务器获取内容,后端服务器通常没有直接连接到外部网络。当httpd收到来自客户端的请求时,请求本身被代理到这些后端服

    • 我想在代理之后提供Restful API,但我不知道如何将请求重定向到Spring Boot应用程序,以便可以使用域名访问它。 我的Spring Boot应用程序使用spring-boot-starter-tomcat运行,应用程序部署良好,我可以在服务器上使用java-jar myApplication.jar部署它。 该应用程序还可以通过写入远程访问https://1.2.3.4:8090在浏

    • 我已经嵌入了在7000端口上运行的Jetty。另外,我有一个keycloak服务器运行在同一台机器的端口8100上。 我的所有客户端访问都通过Jetty进行,即localhost:7000。因此,我将keycloak作为Jetty上的反向代理,即localhost:7000/keycloak/auth将重定向到localhost:8100/auth。它击中正确。 现在,有KeycloakInsta

    • 我是新来的Spring Security,并试图开发Spring Boot应用程序与谷歌登录使用OAuth2下运行的主机名: 8080。这个程序是背后的Apache反向代理服务器https://url.com. Spring启动版本2.1。0 Spring Security版本5.1.1 build.gradle: 应用yml: Spring Security配置: 我请求https://url.