我正在修改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路线,这似乎是不对的。
任何帮助都将不胜感激。
答案 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();
}
}