Spring Security
简介
Spring Security是Spring Resource社区的一个安全组件,为系统提供安全的防护。Spring Security通过注解为每一层(controller、service、dao)都提供安全保护。
Spring Security的主要目标是认证和授权,认证即认证主体的过程,通常指可以在应用程序中执行操作的用户、设备或其他系统。授权即决定是否允许已认证的主体执行某一项操作。
这部分不做说明。(大佬的书中给了一个生动形象的例子,买本书看看非常好)
OAuth2
简介
OAuth2 是一个标准授权协议,允许不同的客户端通过认证和授权的形式来访问被其保护的资源。
认证授权流程:
- 用户通过客户端访问自己持有的资源;
- 资源服务器发现当前请求缺少用户身份标识,将请求重定向授权服务器;
- 客户端携带用户信息访问授权服务器;
- 用户信息正确,授权服务器返回用户访问资源服务器的令牌;
- 客户端携带令牌访问资源服务器;
- 资源服务器返回用户想访问的的资源。
OAuth2协议再Spring Resources中体现为Spring OAuth2。Spring OAuth2主要有两个部分OAuth2 Provider和OAuth2 Client。
OAuth2 Provider
负责公开被OAuth2包含起来的资源。包含权限控制,资源访问控制等功能。可以分为Authorization Service(授权服务)和Resource Service(资源服务),通常情况下,授权服务和资源服务不会部署再同一个服务中,应该是一个Authorization Service对应多个Resource Service。
Authorization Server
Authorization Server需要配置客户端的详细信息和令牌服务的实现。
开启Authorization Server的功能,实现以下配置:
- 配置客户端信息:ClientDetailsServiceConfigurer;
- 配置授权Token节点和Token服务:AuthorizationServerEndpointsConfigurer;
- 配置Token节点的安全策略:AuthorizationServerSecurityConfigurer
客户端信息 ClientDetailsServiceConfigurer
客户端Id:clientId,唯一
客户端密码:secret
客户端的域:scope
认证类型:authorizedGrantTypes
权限信息:authorities
配置授权Token节点和Token服务 AuthorizationServerEndpointsConfigurer
authenticationManager:密码验证配置
userDetailsService:配置获取用户认证信息接口
authorizationCodeService:配置验证码服务
implicitGrantService:配置管理implict验证的状态
tokenGranter:配置token Granter
配置Token节点的安全策略 AuthorizationServerSecurityConfigurer
其余的配置说明省略
示例
一共三个服务,一个注册中心,一个资源服务器,一个认证服务器
注册中心
使用之前的服务
资源服务器
配置访问规则:除特定路径,其他路径都需要校验权限
设置资源服务器的认证方式:访问认证服务器进行校验
配置客户端信息
认证服务器
设置安全认证
设置认证时获取信息的流程
说明
1.当调用认证服务进行获取token的时候,认证服务器根据userDetailsService获取用户信息,认证成功后往oauth_access_token表插入数据
2.根据获取到的access_token去请求资源服务器的接口
资源服务器在接收请求的时候,通过过滤器OAuth2AuthenticationProcessingFilter调用OAuth2AuthenticationManager发起rest请求,请求资源服务器,详细内容看OAuth2AuthenticationManager的authenticate(Authentication authentication)方法
链路如下:
资源服务器-》OAuth2AuthenticationProcessingFilter-》OAuth2AuthenticationManager-》UserInfoTokenServices-》认证服务器-》OAuth2AuthenticationProcessingFilter-》OAuth2AuthenticationManager-》
DefaultTokenServices-》JdbcTokenStore-》表oauth_access_token
内容来源《深入理解Spring Cloud与微服务构建》