我已经通过谷歌没有发现任何具体的答案或例子,所以在这里再次尝试我的运气(通常很幸运)冲浪。Keycloak背后的Apache反向代理
问题
我背后有一个Apache 反向代理运行单个弹簧引导RESTful服务。这个RESTful服务仅运行HTTP。假设它运行在 本地ip 172.s端口8080.
我也配置了一个apache反向代理。假设它运行在 本地ip 172.a和公共ip 55.a.此代理对端口80响应,但所有HTTP通信都自动重定向到443.
我有另一台运行独立Keycloak服务器的服务器。此外, 此服务器配置为可通过 反向代理公开访问。说它在本地IP 172.k上运行。此Keycloak服务器仅在HTTP上运行。 HTTP请求通过反向代理使用SSL进行处理。
最后,我有另一个前端webapp运行本地IP 172.f.这个前端webapp在Nodejs下运行,并且也通过反向代理进行配置。它也只运行HTTP,但客户端(浏览器)通过反向代理使用SSL,就像Keycloak和RESTful服务一样。此前端正在使用RESTful服务,并且还配置为使用keycloak javascript适配器进行身份验证。
将REST风格的服务配置为仅使用Spring Boot Keyak适配器的承载,而前端应用配置为访问类型为public。
RESTful服务服务器,Keycloak服务器和前端服务器不是公共可访问的;它们只能通过反向代理访问。但他们可以相互沟通(因为他们在同一个专用网络中)。
在前端keycloak.json文件中,将auth-server-url
设置为代理url https://example.com/auth
,并且前端能够成功获取有效的令牌。现在,当我尝试使用RESTful服务时,在令牌发行者无效的RESTful适配器中出现错误。在http头中,我当然会发送Authorization: Bearer <token>
。我得到这个错误的原因是,在REST风格的keycolak配置中,我配置了auth-server-url
以使用本地url http://172.k:9080/auth
,所以这个url与令牌中的url不同(它是https://example.com/auth
)。
问题
我不能包括相同的RESTful服务作为前端auth-server-url
,因为这将需要我还设置HTTPS协议的RESTful服务(因为那个URL的HTTPS),这将很多东西都变得复杂,包括需要设置证书和类似的东西。另外我认为在本地服务器上设置SSL效率不高并且不实用。
所以我的问题是我如何使适配器与Keycloak对话而无需通过反向代理。我希望RESTful适配器通过auth-server-url: http://172.k:9080/auth
与Keyclok服务器进行令牌验证。
此前曾有为后端不同的URL,访问内容被删除:https://issues.jboss.org/browse/KEYCLOAK-2623
您是否尝试将Web起源设置为*。如果我是对的,我通过跨域访问得到了同样的问题 – OkieOth
是的我已经尝试将Web-origin设置为'*'而没有任何成功。 – Moni