我目前正在开发基于微服务架构的应用程序。我们使用通过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网关应该是客户端与之交谈的唯一服务器。其他所有内容都将被隐藏。)
因为它是从HttpServletRequest
in读取主机和端口的LoginUrlAuthenticationEntryPoint
。但是服务器看到的请求是Zuul代理发送的请求。因此,我被转发到内部IP而不是代理上的端点。
我尝试将登录页面WebSecurityConfigurerAdapter.configure(HttpSecurity)
的URL设置为Zuul代理的绝对URL。但这只是导致我的应用程序抱怨重定向过多。(可能在那里引起了循环。)
进行此设置的最佳方法是什么?
更新: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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句