//OAuth2认证流程
- 用户发起获取token的请求。
- 过滤器会验证path是否是认证的请求/oauth/token,如果为false,则直接返回没有后续操作。
- 过滤器通过clientId查询生成一个Authentication对象。
- 然后会通过username和生成的Authentication对象生成一个UserDetails对象,并检查用户是否存在。
- 以上全部通过会进入地址/oauth/token,即TokenEndpoint的postAccessToken方法中。
- postAccessToken方法中会验证Scope,然后验证是否是refreshToken请求等。
- 之后调用AbstractTokenGranter中的grant方法。
- grant方法中调用AbstractUserDetailsAuthenticationProvider的authenticate方法,通过username和Authentication对象来检索用户是否存在。
- 然后通过DefaultTokenServices类从tokenStore中获取OAuth2AccessToken对象。
- 然后将OAuth2AccessToken对象包装进响应流返回。
//注意下第7步:
框架中有几个实现:
当中有默认的也有个人实现的着重看下
ResourceOwnerPasswordTokenGranter
这个是框架实现的
其中有一行 这个才会让他去走provider 把验证放给了 spring security provider 返回userDetail 捕获异常做处理 没有异常就是验成功 也就是走向第八步
这个就是为啥
WebSecurityConfigurerAdapter
AuthorizationServerConfigurerAdapter
都要userService
还有就是自己实现 granter Oauth2
重写这个
AbstractUserDetailsAuthenticationProvider的authenticate方法,通过username和Authentication对象来检索用户是否存在
//最后就是
OAuth2AuthenticationProcessingFilter
他来校验token 如果自己实现token 也要重新写 OAuth2AuthenticationProcessingFilter