Spring安全性Oauth 2重定向/ oauth / token上的行为

时间:2017-10-09 14:55:10

标签: java spring spring-mvc oauth

我正在开发一个Spring-Boot应用程序,我遇到的问题如下:

默认情况下,我的控制器的每个请求都会重定向到/ login,所以我不能这样使用它。

我可以通过设置

来禁用/登录
security.oauth2.resource.filter-order = 3

在application.properties中。

但我想知道如何仅针对非浏览器禁用它,所以我仍然可以使用登录。

编辑:

这将是我的方法:

   http.antMatcher("/api/**")
                .authorizeRequests().anyRequest().authenticated();

        http.antMatcher("/**")
                .formLogin();

从/ api /运行的所有东西都是REST,只能由Oauth处理。 休息应该由登录处理。

但它仍然无法正常工作,我仍在进行重定向。

没关系,修复它。感谢userWithLongNumber!

就我而言,事实证明我的WebSecurity配置错误。 这现在有效:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.
            formLogin().permitAll()
            .and()
            .authorizeRequests().anyRequest().authenticated();
}

My RessourceServerConfig如下所示:

@Override
public void configure(HttpSecurity http) throws Exception {

        http
                .exceptionHandling()
                .authenticationEntryPoint(customAuthenticationEntryPoint)
                .and()
                .logout()
                .logoutUrl("/oauth/logout")
                .logoutSuccessHandler(customLogoutSuccessHandler)
                .and()
                .headers()
                .frameOptions().disable()
                .and()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers("/api/**").authenticated();

    }

}

1 个答案:

答案 0 :(得分:1)

您需要降低主应用程序安全过滤器的优先级。

如Spring Boot教程中所述。

  

@EnableResourceServer注释默认使用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER-1)创建安全过滤器,因此通过将主应用程序安全性移动到@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER),我们可以确保OAuth资源的规则优先

设置

  

security.oauth2.resource.filter-order = 3

不会禁用主安全过滤器。它只是将其优先级更改为较低的值。 (负值具有最高优先级。-3具有高于3的优先级)

据我所知,您的问题没有在ResourceServerConfiguration中正确设置匹配器。使其具体如下。

http.antMatcher("/helloOAuth")
            .authorizeRequests().anyRequest().authenticated();

https://github.com/lanka-guide/simple-oauth2-server有一个示例实现。可能会有帮助。