spring security oauth2.0 学习随笔

Spring Security

1、核心是FilterChainProxy,里面维护了SecurityFilterChain 列表,

public class FilterChainProxy extends GenericFilterBean {

……….

private List<SecurityFilterChain> filterChains;

……….

}

每个SecurityFilterChain 维护了Filter 列表,和一个请求路径的匹配器,

public interface SecurityFilterChain {

boolean matches(HttpServletRequest request);

List<Filter> getFilters();

}

请求过来的时候,会先委托给FilterChainProxy,然后FilterChainProxy 遍历SecurityFilterChain 列表,判读是否匹配这个请求,匹配到的话,就取出SecurityFilterChain 里面的List<Filter> 过滤器链,执行过滤。

也就是说每种匹配路径的请求,比如:/api/**、/page/** 都有一个过滤器链

 

2、各个过滤器的介绍

  • FilterSecurityInterceptor 对请求资源权限的校验,比如hasRose(“ROLE_ADMIN”),如果权限校验不通过,抛出AccessDeniedException
  • ExceptionTranslationFilter 针对过滤链中抛出的AccessDeniedException 和AuthenticationException 异常进行处理,根据实际情况决定是否跳转到某个authenticationEntryPoint(正常都是配置登陆页)或者调用异常处理器
  • ...待补充...

 

Spring Security OAuth2.0

1、资源服务跟授权服务分离,对access_token 的请求由Spring MVC 提供的endPoint 处理,对受保护的资源由Spring Security Chain 拦截校验

2、OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用

3、OAuth2.0 支持的四种授权模式:

  • 授权码模式(authorization code):最严谨、安全的方式
  • 简化模式(implicit):适用于纯前端应用
  • 密码模式(resource owner password credentials):信任某个第三方应用,提供用户名和密码,也可以根据业务需求,为第三方应用在服务商那边申请的账号
  • 客户端模式(client credentials):针对第三方应用的,而不是针对用户,通常不涉及用户相关信息,可以获取服务商提供的通用资源

4、oauth2 服务器有三个重要的配置:

  • ClientDetailsServiceConfigurer 定义对clientDetail 的管理
  • AuthorizationServerSecurityConfigurer 定义对提供的endpoint 的安全约束
  • AuthorizationServerEndpointsConfigurer 定义授权和令牌端点以及令牌服务

5、oauth2 几个重要的类:

  • ClientDetailsService 对ClientDetail 的管理接口,正常是使用实现类JdbcClientDetailsService,或者是在这个类上扩展
  • AuthorizationServerTokenServices 对access_token 进行管理的接口,正常使用其实现类DefaultTokenServices 管理access_token,对access_token 的持久化委托给TokenStore
  • TokenStore 实际持久化access_token 的接口,有多个实现类,包括内存持久,redis持久,jdbc持久,实际项目上实现该接口,自定义实现类
  • UserDetailsService 认证时加载用户数据的接口,项目是实现该类,从mysql 中获取用户数据
  • AuthorizationCodeServices 用于授权码模式生成code,默认有于内存和JDBC 的实现,项目中实现该接口,持久到redis

6、密码模式、客户端模式拦截器,正常是一致,因为都是使用同一个端点:/oauth/token

密码模式:  

客户端模式: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值