共计 965 个字符,预计需要花费 3 分钟才能阅读完成。
1. 前言
上一文着重讲了当用户发动第三方受权申请是如何初始化 OAuth2AuthorizationRequest
受权申请对象以及如何通过过滤器进行转发到第三方的。明天咱们接着这个流程往下走,来看看服务器收到受权申请是怎么做的。
2. OAuth2 登录认证
当第三方收到 OAuth2 受权申请后,会将受权的回执通过我方提供的回调申请 redirect_uri
传递给咱们。因为默认状况下回调的门路满足 /login/oauth2/code/*
,所以咱们只有找到拦挡回调的过滤器就能够晓得 Spring Security 是如何解决回调了。通过搜寻确认了OAuth2LoginAuthenticationFilter
就是解决回调的过滤器。
OAuth2LoginAuthenticationFilter
第三方认证服务器在调用 redirect_uri
时附加 code
和state
参数,在被这个 Filter
拦挡后,创立一个待认证凭据 OAuth2LoginAuthenticationToken
,并委托给了AuthenticationManager
进行身份验证。
一旦胜利验证,则生成认证凭据 OAuth2AuthenticationToken
和认证客户端对象 OAuth2AuthorizedClient
。最初,OAuth2AuthenticationToken
返回,并最终存储在 SecurityContextRepository
实现认证解决;而 OAuth2AuthorizedClient
被保留到OAuth2AuthorizedClientRepository
。流程图如下:
这个过滤器和
UsernamePasswordAuthenticationFilter
一样继承了AbstractAuthenticationProcessingFilter
,流程有相像的中央。
3. 总结
当第三方受权后会通过回调来告诉客户端,而客户端收到回调告诉后会对受权后果进行认证操作能力表明这一套流程是合规的。而这个流程是由过滤器 OAuth2LoginAuthenticationFilter
来管制的。明天对其流程进行了图解,其中的认证过程还是一个未解之谜,锁定:码农小胖哥,这个答案会在系列的下一篇为你揭晓。
关注公众号:Felordcn 获取更多资讯
集体博客:https://felord.cn