@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

EnableOAuth2Sso源码解读