有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Spring云Zuul代理背后的java Spring OAuth授权服务器

我目前正在开发一个基于微服务架构的应用程序。我们使用使用Spring Cloud Netfix的Zuul服务器实现的API网关将请求路由到我们的微服务

为了实现所有服务的单点登录,我目前正在使用Spring云安全设置的OAuth2服务器上工作。服务器基本上只是Dave Syer的Repo中实现的拷贝和过去:https://github.com/dsyer/spring-security-angular/tree/master/oauth2/authserver

主要区别在于,我希望通过Zuul代理将请求路由到OAuth服务器。这样我就不必直接公开我的OAuth服务器,可以动态地添加和删除登录服务器

问题是我不知道如何正确配置这个设置。当我试图访问OAuth服务器上受保护的资源时,我会被转发到登录页面。这当然是意料之中的。但我不知道如何设置转发时使用的主机名和端口。我希望服务器转发到Zuul服务器上的端点,该端点将被代理回OAuth服务器。(Zuul API网关应该是客户端与之对话的唯一服务器。其他所有内容都将隐藏。)

实际上,主机和端口是从LoginUrlAuthenticationEntryPoint中的HttpServletRequest读取的。但服务器看到的请求是Zuul代理发送的请求。因此,我被转发到一个内部IP,而不是代理上的端点

我试图将WebSecurityConfigurerAdapter.configure(HttpSecurity)中登录页面的URL设置为我的Zuul代理的绝对URL。但这只是导致我的应用程序抱怨重定向太多。(可能在那里引起了一个循环。)

最好的方法是什么

  • 我必须通过覆盖bean来实现某种自己的转发策略吗
  • 我是否缺少一个配置选项
  • 我的想法本身错了吗?(戴夫·赛尔在回答How to avoid redirect to another host with Zuul?问题时说,你通常不会代理这个问题,但他没有解释原因。)

共 (1) 个答案

  1. # 1 楼答案

    就我理解你的问题而言,spring-cloud-security(对于EnableOauth2Sso部分)和spring-cloud(对于zuul),这不可能使用zuul代理对授权服务器的调用。 主要原因是spring-cloud-security独立地(在考虑Zuul路由逻辑之前)保护网关

    这意味着(来自Dave Syer的OAuth2示例的示例配置)spring.oauth2.client.*配置

    spring:
      oauth2:
        client:
          accessTokenUri: http://localhost:9999/uaa/oauth/token
          userAuthorizationUri: http://localhost:9999/uaa/oauth/authorize
          clientId: acme
          clientSecret: acmesecret
    

    在允许任何人进入Zuul路线zuul.routes.*之前被认为是

    此外,此设置允许客户端代理存储两个cookie:一个用于网关,另一个用于授权服务器

    我希望这有帮助