带有Zuul代理的Spring Security Oauth2 SSO

dde*_*ele 5 spring spring-security spring-security-oauth2 spring-cloud

我正在修改来自Springs优秀安全教程oauth2-vanilla样本.oauth2-vanilla将Zuul Proxy和UI组合到一个应用程序中.我想分开Zuul代理和UI.(Zuul代理应充当API网关和多个UI的反向代理).

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

oauth2-vanilla看起来像这样

我想转向这样的地方:

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

@EnableOAuth2Sso

我创建了一个新的UI webapp,其中包含带有/user注释的UI(Angular stuff).

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

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

我用修改后的样本创建了一个git存储库.

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

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

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

/user

我需要用zuul ui路由作为前缀,这似乎也不对.

任何帮助,将不胜感激.

小智 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();
    }
}
Run Code Online (Sandbox Code Playgroud)