@EnableOAuth2Sso 和 @EnableResourceServer 在同一个应用程序中
Posted
技术标签:
【中文标题】@EnableOAuth2Sso 和 @EnableResourceServer 在同一个应用程序中【英文标题】:@EnableOAuth2Sso AND @EnableResourceServer in same app 【发布时间】:2018-12-14 05:30:46 【问题描述】:我想要一组服务,可与“客户端凭据”(用于机器对机器)和 OAuth2 单点登录一起用于常规 web 应用程序(由同一应用程序提供服务)。
我尝试同时设置@EnableOAuth2Sso 和@EnableResourceServer;我希望应用程序“尝试”基于令牌,然后回退到 SSO 重定向,以防它找不到任何内容并且用户没有会话。
每个配置都可以自己正常工作(带有:
@Bean
public RemoteTokenServices ...
供@EnableResourceServer 配置“CheckTokenEndpointUrl”)。
但只要我尝试两者,我都会得到:
应用程序启动失败
说明:
org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration 中的方法 springSecurityFilterChain 需要一个 bean,但是找到了 2 个: - userInfoTokenServices:由类路径资源 [org/springframework/boot/autoconfigure/security/oauth2/resource/ResourceServerTokenServicesConfiguration$RemoteTokenServicesConfiguration$UserInfoTokenServicesConfiguration.class] 中的方法“userInfoTokenServices”定义 - remoteTokenServices:由类路径资源 [my/CustomWebSecurityConfigurerAdapter.class] 中的方法“remoteTokenServices”定义
【问题讨论】:
我也遇到了同样的问题,如果你找到了可以分享一下解决方法吗? 【参考方案1】:在您的 Spring Boot 应用程序类中使用 @EnableOAuth2Sso
注释,在配置类中使用 @EnableResourceServer
注释,并在此类中定义要与访问令牌一起使用的端点。
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter
@Override
public void configure(HttpSecurity http) throws Exception
http
.antMatcher("/user") //end point that needs access token in header
.antMatcher("/info") //end point that needs access token in header
.authorizeRequests().anyRequest().authenticated();
更多信息请参考link
【讨论】:
以上是关于@EnableOAuth2Sso 和 @EnableResourceServer 在同一个应用程序中的主要内容,如果未能解决你的问题,请参考以下文章
@EnableZuulProxy+ @EnableOAuth2Sso + AuthenticationFailureHandler
@EnableOAuth2Sso - 如何保护/取消保护资源?
@EnableOAuth2Sso 注释 OpenID Connect 是不是兼容?
@ EnableOAuth2Sso时不支持请求方法'POST'
EnableEurekaClient 不能与 EnableOAuth2Sso 一起使用。它导致 springSecurityFilterChain bean AlreadyBuiltException