Spring 安全 OAuth2 实现

Posted

技术标签:

【中文标题】Spring 安全 OAuth2 实现【英文标题】:Spring security OAuth2 implementation 【发布时间】:2017-08-06 01:17:40 【问题描述】:

使用 Spring Boot 1.5.2.RELEASE 和 Java 8

我试图了解,public void configure(HttpSecurity http)WebSecurityConfigurerAdapterResourceServerConfigurerAdapter 的方法是什么?

使用以下代码,ResourceServerConfigurerAdapterconfigure(HttpSecurity http) 方法优先于 WebSecurityConfigurerAdapter。我在ResourceServerConfiguration 中所做的所有更改都正在生效,看来WebSecurityConfigurerAdapter 被完全忽略了。

我们什么时候使用这些方法(用例)?而且,即使是授权类型password 也需要覆盖WebSecurityConfigurerAdapter.configure(..) 方法

使用security.oauth2.resource.filter-order = 3 如果没有这个属性,我会不断收到403 Access Denied

OAuth2 资源过滤器的默认顺序已从 3 更改为 SecurityProperties.ACCESS_OVERRIDE_ORDER - 1

网络安全配置

@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter 

@Override
public void configure(HttpSecurity http) throws Exception 
    http.csrf().disable()
    .authorizeRequests()
    .antMatchers("/unsecured").permitAll()
    .antMatchers("/users").hasRole("USER")
    .antMatchers("/api/secured").hasRole("ADMIN")
    .antMatchers("/api/admin").authenticated()
    .antMatchers("/greeting").authenticated();
  

资源服务器

@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends
        ResourceServerConfigurerAdapter 

    public void configure(HttpSecurity http) throws Exception 
        http.csrf().disable()
            .authorizeRequests()
                .anyRequest().permitAll();          
    

【问题讨论】:

【参考方案1】:

我想你在这里有答案,请查看给出的解决方案 Spring Security OAuth2, which decides security?

【讨论】:

以上是关于Spring 安全 OAuth2 实现的主要内容,如果未能解决你的问题,请参考以下文章

使用Spring Security和OAuth2实现RESTful服务安全认证

spring cloud gateway + oauth2 实现网关统一权限认证

使用 Spring Boot 的角色层次结构和 OAuth2 安全性

在 Spring OAuth2 中配置安全性:身份验证请求的访问被拒绝

Spring Security +Oauth2 +Spring boot 动态定义权限

Spring Oauth2 - 重新加载主体