我目前正在开发基于微服务架构的应用程序。我们使用使用 Spring Cloud Netfix 的 Zuul 服务器实现的 API-Gateway 将请求路由到我们的微服务。
为了实现我们所有服务的单点登录,我目前正在使用 Spring Cloud Security 设置 OAuth2 服务器。服务器基本上只是 Dave Syer 的回购中实现的副本和过去:https ://github.com/dsyer/spring-security-angular/tree/master/oauth2/authserver
主要区别在于我想通过 Zuul 代理将请求路由到我的 OAuth 服务器。这样我就不必直接公开我的 OAuth 服务器,并且可以动态添加和删除登录服务器。
问题是我不了解如何正确配置此设置。当我尝试访问 OAuth 服务器上的受保护资源时,我被转发到登录页面。这当然是意料之中的。但我不知道如何设置转发时使用的主机名和端口。我想要发生的是服务器转发到 Zuul 服务器上的端点,该端点将被代理回 OAuth 服务器。(Zuul API-Gateway 应该是客户端曾经与之交谈的唯一服务器。其他所有内容都将被隐藏。)
因为它是从HttpServletRequest
in读取主机和端口LoginUrlAuthenticationEntryPoint
。但是服务器看到的请求是Zuul代理发送的请求。所以我被转发到一个内部 IP 而不是代理上的端点。
我试图将登录页面的 URL 设置WebSecurityConfigurerAdapter.configure(HttpSecurity)
为我的 Zuul 代理的绝对 URL。但这只是导致我的应用程序抱怨重定向太多。(可能在那里造成了循环。)
设置它的最佳方法是什么?
- 我是否必须通过覆盖 bean 来实现某种自己的转发策略?
- 是否有我缺少的配置选项?
- 我的想法本身是错误的吗?(在他对如何避免使用 Zuul 重定向到另一个主机的回答中? Dave Syer 说你通常不会代理这个,但没有解释原因。)