Java Spring Security+;OAuth,如果缺少访问令牌,则返回

Java Spring Security+;OAuth,如果缺少访问令牌,则返回,java,spring,spring-security,oauth-2.0,spring-security-oauth2,Java,Spring,Spring Security,Oauth 2.0,Spring Security Oauth2,我在应用程序中使用Spring安全性来保护我的大多数端点。我正在使用SpringSecurityOAuth2来保护某个子集。 外部服务器和资源服务器本身上的用户都将访问受OAuth保护的端点的子集 是否可以在此端点上同时使用这两种保护,并使用或?如果用户从外部服务器访问端点,他们将需要OAuth访问令牌才能进入,如果用户直接登录到资源服务器,他们将没有访问令牌,但我希望使用我的其他筛选器链来执行标准身份验证 我以前从未见过一个HTTP块包含两个独立的筛选器链,但可能有某种方法我不知道。我认为受保

我在应用程序中使用Spring安全性来保护我的大多数端点。我正在使用SpringSecurityOAuth2来保护某个子集。 外部服务器和资源服务器本身上的用户都将访问受OAuth保护的端点的子集

是否可以在此端点上同时使用这两种保护,并使用或?如果用户从外部服务器访问端点,他们将需要OAuth访问令牌才能进入,如果用户直接登录到资源服务器,他们将没有访问令牌,但我希望使用我的其他筛选器链来执行标准身份验证


我以前从未见过一个HTTP块包含两个独立的筛选器链,但可能有某种方法我不知道。

我认为受保护的资源不需要两个筛选器链,只需要一些考虑到可能遇到的不同身份验证的访问规则。例如,是一个资源服务器,它在其/photos端点上接受cookie和令牌。在Sparkr中,您有一个用于登录和授权端点的筛选器链(一个
WebSecurityConfigureAdapter
),以及一个用于受保护资源的筛选器链(一个
ResourceServerConfigurerAdapter
)。默认情况下,
ResourceServerConfigurerAdapter
WebSecurityConfigureAdapter
之前应用,因此它必须与登录和授权资源不匹配。相关匹配器和访问规则如下所示:

    @Override
    public void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
            // Since we want the protected resources to be accessible in the UI as well we need 
            // session creation to be allowed (it's disabled by default in 2.0.6)
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
        .and()
            .requestMatchers().antMatchers("/photos/**", "/oauth/users/**", "/oauth/clients/**","/me")
        .and()
            .authorizeRequests()
                .antMatchers("/me").access("#oauth2.hasScope('read')")                  
                .antMatchers("/photos").access("#oauth2.hasScope('read') or (!#oauth2.isOAuth() and hasRole('ROLE_USER'))")                                        
        ...
    }

在这里,由于访问规则,您可以看到一个仅使用OAuth的资源(
/me
)和一个使用令牌或cookie的资源(
/photos
)。

Dave您是否建议在
资源服务器配置
中配置它,而不使用单独的
Web安全配置适配器
?我在Sparkr2中找不到为同一端点配置两个Authentications的部分?我一直很感兴趣的是,我无法在不干扰过滤器的情况下实现它,因此,如果你能给我举一个例子,我会很感激它,它做到了这一点,并为我节省了大量的时间和精力。回答得很好,谢谢你的帮助!不,我不能让它为我工作。我在WebSecurityConfigureAdapter中指定的任何内容都将被忽略。这对我也适用!如果要使用基本身份验证作为回退,请不要忘记将
和().httpBasic().realmName(“MyRealm”)
附加到链中。