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

如何将Spring Boot中的Keyclope与不同的上下文根和反向代理集成

匡玉堂
2023-03-14

我们目前正在开发一个使用Spring Boot 1.4和Keyclope 2.5.0(配置为openid连接服务)的微服务应用程序,使用Keyclope Spring适配器(而不是Spring Boot适配器)。

我们所有的微服务都放在一个负载平衡器和一个额外的反向代理之后,因为应用程序将托管在一个上下文根后面的现有域上(因此我们的应用程序的根是http://foo.bar/foobar/剩下的服务是http://foo.bar/foobar/rest/)。

在这个给定的场景中,我们面临着关键斗篷的几个问题:

  1. 如果需要登录,则将Keycloak转发到 /sso/login。在我们的情况下,这是不必要的行为,因为http://foo.bar/sso/login将不存在。我已经找到了改变转发的方法,但没有办法让Keycloak监听相同的url;在这种情况下,我们最终得到了404。
  2. 登录后,Keycloak重定向回具有正确令牌的 /sso/loginurl,但如果这不是同一台服务器,请求将失败,并将我们重定向到http://foo.bar/.由于每个微服务都公开 /sso/login,这实际上可能是一个完全不同的服务器。
  3. 如果密钥斗篷托管在同一个域上,我们最终会进入重定向循环。我们还希望密钥斗篷托管在同一个域和上下文根http://foo.bar/foobar/auth/上。

我们已经尝试使用"Token-store":"cookie",但这并不能解决问题。

是否有解决这些问题的方法,或者Keyclope可能不是我们用例的正确解决方案?

更新05/05/2017:将我的答案从这里移动到答案

共有1个答案

太叔景同
2023-03-14

我们现在已经启动并运行了Keyclope,所以我将简要解释一下我们所做的工作。我们的应用程序的前端运行Angular2,我们在Angular应用程序本身中创建了一个自定义登录页面(因此它不是Keyclope的主题),该页面将直接查询Keyclope API以获取OAuth2承载令牌。前端将在授权标头中的每个请求上发送此令牌(根据OAuth标准)。在服务端,我们已经将key斗篷配置为仅承载解决方案(key斗篷.json中的仅承载:true),这样应用程序只返回401或403,而不是转发到登录页面。

使用此配置,用户将永远不会从 /sso/login页面看到任何内容,也不再存在重定向问题。

太长,读不下去了我描述的用例也不现实,调用REST URL然后转发到登录页面是一种糟糕的事情:)

 类似资料:
  • 我的Spring Boot服务在反向代理之后工作,并由外部KeyClope服务器保护。 成功登录Keycloak服务器后,它会将我重定向到我的服务,然后我被重定向到上下文路径的根,而不是初始url。 所以请求链看起来像: 初始url: 并重定向: http://~主机名//~服务名//rest/sso/login <代码>https://ext-keycloak.server/auth/realm

  • 我们希望更改Tomcat Web应用程序的上下文根,并让旧URL将用户引导到新命名的应用程序。 一种方法是部署上下文根为newappname的应用程序和另一个上下文根为oldappname的应用程序,并让它引导用户找到新的URL。 这个简单的选项对我们不开放,公司内部政策禁止在同一个Tomcat实例中运行多个应用程序(不可协商)。 我记得GlassFish有一个“备用文档根”的概念,可用于为应用程

  • 本文向大家介绍LINUX中NGINX反向代理下的TOMCAT集群(详解),包括了LINUX中NGINX反向代理下的TOMCAT集群(详解)的使用技巧和注意事项,需要的朋友参考一下 Nginx具有反向代理(注意和正向代理的区别)和负载均衡等特点。 这次Nginx安装在 192.168.1.108 这台linux 机器上。安装Nginx 先要装openssl库,gcc,PCRE,zlib库等。 Tom

  • 本小节,我们继续学习 Nginx 在 七层反向代理中的其它几种比较常见的情况,比如 web 服务中的 WebSocket 协议的反向代理和 uwsgi 协议的反向代理。 1. WebSocket的反向代理 WebSocket 是目前比较成熟的技术了, WebSocket 协议为创建客户端和服务器端需要实时双向通讯的 webapp 提供了一个选择。服务器可以向浏览器推送相关消息,这样在前端实现的某个

  • Nginx 最强大的地方是在于其 HTTP 请求的反向代理,也即常说的七层反向代理。在这一层代理中,通过 Nginx 框架提供的相关配置,我们能在该层将发送过来的 http 协议转换成各种其他的协议比如 fastcgi 协议、uwsgi协议、grpc、http(高版本协议)、websocket协议等。这样使用 Nginx 框架,我们可以支持多种应用服务(java web、python web等)的

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