当前位置: 首页 > 面试题库 >

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

常雅珺
2023-03-14
问题内容

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

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

主要区别在于我想通过Zuul代理将请求路由到我的OAuth服务器。这样,我将不必直接公开我的OAuth服务器,并且可以动态添加和删除Login
Server。

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

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

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

进行此设置的最佳方法是什么?

  • 我是否必须通过重写bean来实现某种自己的转发策略?
  • 我是否缺少配置选项?
  • 我的想法本身错了吗?(在他对如何避免与Zuul重定向到另一台主机的回答中,Dave Syer说您通常不会代理此服务器,但没有解释原因。)

问题答案:

更新 :POC可以在这里找到https://github.com/kakawait/uaa-behind-zuul-
sample

您是否尝试过以下设置(在zuul服务器上):

zuul:
  routes:
    uaa-service:
      path: /uaa/**
      stripPrefix: false

security:
  # Disable Spring Boot basic authentication
  basic:
    enabled: false
  oauth2:
    sso:
      loginPath: /login
    client:
      accessTokenUri: https://<zuul hostname>/uaa/oauth/token
      userAuthorizationUri: https://<zuul hostname>/uaa/oauth/authorize
      ...

基本上,它对我的​​项目有效,我要做的就是禁用路由CSRF保护/uaa/oauth/token

验证服务器应处于开启状态

server:
  # Use different context-path to avoid session cookie overlapping
  context-path: /uaa

经过测试 Spring-Cloud.Brixton.M3

感谢@ thomas-letsch,您应该像下面那样调整安全性(示例)

public void configure(HttpSecurity http) throws Exception { 
    http.logout().and()
        .antMatcher("/**").authorizeRequests() 
        .antMatchers("/index.html", "/home.html", "/", "/uaa/oauth/**").permitAll() 
        .anyRequest().authenticated().and() 
        .csrf().csrfTokenRepository(getCSRFTokenRepository()).ignoringAntMatchers("/uaa/‌​oauth/token").and() 
        .addFilterAfter(createCSRFHeaderFilter(), CsrfFilter.class); 
}


 类似资料:
  • 我目前正在开发一个基于微服务架构的应用程序。我们使用一个使用Spring Cloud NetFix的Zuul服务器实现的API网关将请求路由到我们的微服务。 为了实现我们所有服务的单点登录,我目前正在一个使用Spring Cloud Security设置的OAuth2服务器上工作。服务器基本上只是Dave Syer的repo中实现的复制和过去:https://github.com/dsyer/sp

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

  • 我有一个多租户项目,它将调用多个微服务来执行特定任务。 我希望微服务从发送的请求中了解要使用哪个DB,因为每个租户都将使用微服务,但是,租户将拥有自己的DB。我有另一个解决方案,它有一个处理API密钥管理的Web项目。 比方说,API密钥管理位于域:portal.example.com 当 tenant.example.com 在 microservice.example.com 调用微服务时,我

  • 我在下面设置Spring配置: 和Maven设置如下:

  • 现在,我了解了访问令牌和刷新令牌,但我不知道如何实现它。 我有一个项目,前端是棱角分明的,后端是node.js的,前面有微服务架构和网关。我可以使用像oaust2授权服务器一样的aust0,用户存储在里面? 怎么做?在aust0文档中有大量的说明,我不明白哪个适合我。 我必须通过网关拦截登录、注销和注册,并重定向到auth0,或者我必须在我的用户微服务内部完成这些操作? 在我的项目中,还有个人信息

  • 我们有一个连接到Exchange服务器的MVC应用程序。我们使用以下代码连接到本地服务器以创建服务: 这很好,但现在我们的IT部门正在将Exchange服务器迁移到云上,一些用户在云服务器上,而另一些用户在本地。所以我把代码改成: 我正在使用服务号进行自动发现(由于某种原因,它不适用于常规帐户),然后我正在将服务的凭据更改为登录的用户,因此他可以访问收件箱。问题是,随机地,服务器返回“请求失败。远