SpringSecurity认证流程
2019-12-19 15:55:25 84 举报
SpringSecurity认证流程
作者其他创作
大纲/内容
TokenEndpoint(getAccessToken)
循环多个
DefaultAccessTokenConverter(extractAccessToken)
1
JwtAccessTokenConverter(enhance)
InMemoryTokenStore
RedisTokenStore
循环认证AuthenticationProvider,只要一个Provider认证成功,就返回用户信息
3.提取token中包含的信息
如果没有配置AccessTokenConverter,那么会使用默认的JwtAccessTokenConverter
如果配置了JWT则在此做转换
DefaultUserAuthenticationConverter只会提取出username
此处会调用默认的DefaultUserAuthenticationConverter,如果我们要提取token中的附加信息一般会自己实现该类并覆盖默认配置
TokenEnhancerChain(enhance)
SpringSocialTokenServices
去数据库或者内存等数据源获取用户信息
JwkTokenStore
JwtAccessTokenConverter(extractAccessToken)
DefaultTokenServices(loadAuthentication)
OAuth2AuthenticationProcessingFilter
2.判断读取的token是否过期,过期则结束流程,返回401
调用自己的实现
ClientCredentialsTokenEndpointFilter(attemptAuthentication)
提取token信息(readAuthentication)
通过传递过来的authenticate,将认证委托给子类DaoAuthenticationProvider,取到用户信息后,会再次校验用户信息,例如与密码做比较,用户是否锁定等等
JdbcTokenStore
AuthorizationServerEndpointsConfigurer(grant)
JwtAccessTokenConverter(extractAuthentication)
DefaultUserAuthenticationConverter(extractAuthentication)
WebSecurityConfigurerAdapter(authenticate)
convertAccessToken在调用extractAccessToken前会把jwtToken进行decode
AbstractAuthenticationProcessingFilter
UserDetailsService
访问资源时会走的校验
Resource 认证token有效性
AbstractTokenGranter
返回OAuth2Authentication,其中包含了user信息
token读取(readAccessToken)
OAuth2AuthenticationManager(authenticate)
调用convertAccessToken,函数内调用JwtAccessTokenConverter的extractAccessToken函数
常用实现类有OAuth2AuthenticationManagerProviderManager
调用extractAuthentication之前,会把token进行jwtDecode转成一个map结构
执行自己的 provider实现
JwtTokenStore
会调用配置的授权服务器token-info-uri端点,进行token读取
2
调用在EnableWebSecurityr配置的provider
UserInfoTokenServices
RemoteTokenServices
1.token读取
ResourceOwnerPasswordTokenGranter(authenticate)
3.读取成功,将提取的token信息设置到上下文(SecurityContextHolder.getContext().setAuthentication(authResult);)
获取token时先过滤器,执行完在走/oauth/token接口的逻辑
具体的token提取地方,此处也可以使用自己的实现;最终返回OAuth2AccessToken,其中包含了token以及解析出的附加信息
DefaultAccessTokenConverter(extractAuthentication)
获取token逻辑
TokenStore
每个provider实现相差不大
2.调用authenticationManager.authenticate进行token校验以及读取用户信息
token认证
1.提取请求头中的Authorization字段
ClientDetailsUserDetailsService(loadUserByUsername)
AbstractUserDetailsAuthenticationProvider(authenticate)
DefaultTokenServices(createAccessToken)
ProviderManager(authenticate)
通过client_id查询出数据库中的client信息返回UserDetails
createAccessToken
/oauth/token端点的逻辑
DaoAuthenticationProvider(retrieveUser)
CompositeTokenGranter(grant)
AuthenticationManager(authenticate)
TokenStore的实现类,此处解析的是JwtTokenStore
AuthenticationProvider(authenticate)
getOAuth2Authentication
0 条评论
下一页