Spring Security OAuth2授权服务器资源服务器基本配置(二)

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!   如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️,满足一下我的虚荣心💖🙏🙏🙏 。

  上一篇介绍了一些基本的概念及大致的使用流程,本篇我们完成授权服务的搭建并实现基本的认证授权功能。

目录

依赖

配置授权服务器

配置资源服务器

配置WebSecurityConfig

测试

使用postman测试

结合WebSecurityConfig进行资源访问控制


依赖

参考上一篇中依赖。Spring Security OAuth2使用步骤(一)

配置授权服务器

完整代码如下:

@EnableAuthorizationServer
@Configuration
public class AuthorizationServer extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.allowFormAuthenticationForClients();
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(clientDetails());
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.allowedTokenEndpointRequestMethods(HttpMethod.GET,HttpMethod.POST);
        endpoints.tokenStore(tokenStore());
    }

    @Bean
    public ClientDetailsService clientDetails() {
        return new JdbcClientDetailsService(dataSource);
    }

    @Bean
    public TokenStore tokenStore() {
        return new JdbcTokenStore(dataSource);
    }
    
}

对授权服务的一些说明:

客户端配置:记录到数据库(oauth_client_details)中,从数据库中获取客户端信息。

端点配置:token存储到数据库(oauth_access_token)中,允许使用get、post方式获取      token。

security配置:配置允许表单认证

配置资源服务器

完整代码如下:

@Configuration
@EnableResourceServer
public class CustomResourceServer extends ResourceServerConfigurerAdapter {

    private static final String RESOURCE_ID = "uaa-service";

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId(RESOURCE_ID);
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated();
    }
    
}

对授权服务的一些说明:

HttpSecurity配置:使用默认配置,不在/oauth/**下的资源都是受保护的资源。

resources配置:配置了resourceId,注意如果配置了resourceId,认证时会校验resourceId,需要oauth_client_details表中的 resource_ids 值与此处设置的值相等。

配置WebSecurityConfig

完整代码如下:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

对WebSecurityConfig的一些说明:

@EnableGlobalMethodSecurity(prePostEnabled = true):开启方法级别的授权认证。

@EnableWebSecurity:开启Web保护功能。

测试

新建测试类

@RestController
public class TestController {

    @RequestMapping(value = "/uaa")
    public String test() {
        return "oauth";
    }

}

使用postman测试

访问 localhost:9004/uaa,结果不允许访问,结果如下:

{
    "error": "unauthorized",
    "error_description": "Full authentication is required to access this resource"
}

通过之前的介绍知道除 /oauth 下的路径之外都是受保护的,需要授权才可以访问,如上我们访问 /uaa 提示401 未授权。

下面我们使用客户端模式获取token,然后携带token再次访问资源/uaa。

获取下token:

使用get方式获取token,也可以直接从浏览器访问如下路径:

localhost:9004/oauth/token?client_id=dev-client&client_secret=123456&grant_type=client_credentials&scopes=all

复制返回的access_token再次访问资源/uaa,如下:

结合WebSecurityConfig进行资源访问控制

测试类

@RestController
public class TestController {


    @RequestMapping(value = "/uaa")
    public String test() {
        return "oauth";
    }

    @RequestMapping(value = "/ignore")
    public String ignore() {
        return "ignore";
    }

}

HttpSecurity配置改为:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/ignore");
    }
}

WebSecurity可以配置忽略某些资源的访问不用授权,通常用来配置静态资源的访问,如下:

antMatchers("/js/**","/css/**").permitAll() 
// 或
antMatchers("/**/*.js").permitAll()

这里只是添加了一个WebSecurity的配置,用来演示忽略资源/ignore的访问不用授权即可直接访问。

通常WebSecurityConfig配合资源服务器中的configure(HttpSecurity http)方法,相互配合来对不同url进行权限控制,之后用到再贴代码。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值