带有Zuul代理的Spring Security Oauth2 SSO

时间:2016-03-19 10:11:31

标签: spring spring-security spring-cloud spring-security-oauth2

我正在修改oauth2-vanilla中的Springs excellent security tutorials样本。 oauth2-vanilla将Zuul Proxy和UI组合到一个应用程序中。我想分开Zuul代理和UI。 (Zuul代理应充当API网关和多个UI的反向代理)。

当通过zuul代理访问UI时,它应该能够在UI和资源后端之间基于Oauth2进行SSO。

oauth2-vanilla看起来像这样

我希望转到这样的地方:

我已从网关中删除了UI部分,并为ui添加了一个zuul路径

zuul: routes: resource: url: http://localhost:9000 user: url: http://localhost:9999/uaa/user ui: url: http://localhost:8080

我创建了一个新的UI webapp,其中包含带有@EnableOAuth2Sso注释的UI(Angular内容)。

所以我通过http://localhost:8888(通过zuul代理)访问用户界面。 在验证并完成UI流程后,我可以访问返回给用户的/ user端点。 (在调试期间,我看到当我访问/ user端点时,我有一个带有OAuth2Authentication的HTTP会话。

但是,当我访问/ resource端点时,HttpSessionSecurityContextRepository无法找到会话,也无法使用OAuth2Authentication构建上下文。

我已使用修改过的样本创建了a git repository

我猜测网关配置有问题。 我尝试更改cookie路径,更改代理中的HttpSecurity规则,但我无法让它工作。

我不明白为什么UI通过代理访问时能够很好地解析/user端点(使用HTTP会话和OAuth2Authentication),但无法访问/resource端点。

此外,由于UI现在在/ui上下文中运行,似乎我需要在网关中使用以下代码来加载角度css / js文件。

.antMatchers("/ui/index.html", "/ui/home.html", "ui/css/**", "/ui/js/**").permitAll().anyRequest().authenticated();

我需要在它前面添加zuul ui路线,这似乎是不对的。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我无法让@EnableOauthSso工作。相反,我注释为@EnableResourceServer并为Zuul创建了一个安全配置。

@Configuration
@EnableResourceServer
public class JwtSecurityConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/oauth/**").permitAll()
            .antMatchers("/**").hasAuthority("ROLE_API")
            .and()
            .csrf().disable();
    }
}