Spring Social 基本原理
上一篇文章中我们讲解了OAuth基本原理。这篇文章我们将讲一下OAuth和Spring Social之间的关系
我们把上一章节中的图略微修改一下,也就是第六步获取自拍数据变成获取用户信息,Client获取到服务提供商的用户信息后,构建Authentication(在SpringSecurity中登录验证成功后就会生成Authentication)并放入到SecurityContext中,图中的第1-7步骤就构成了SpringSocial要做的事情。
那么步骤1-7在SpringSocial中是怎么完成的呢?它提供了一些接口和默认的实现类,如下图所示:
1.ServiceProvider
这个接口主要是完成步骤1-6,这个接口主要依靠OAuth2Operations和Api两个接口合作完成,SpringSocial提供了一个抽象类AbstractOAuth2ServiceProvider
1.1OAuth2Operations
这个接口主要是完成步骤1-5,默认的实现类是OAuth2Template
1.2Api
这个接口主要是用于获取服务提供商的用户信息也就是步骤6,SpringSocial提供了一个AbstractOAuth2Binding的抽象类
2.Connection
Connection封装的是服务提供商中的用户信息,但是封装标准和Api从服务提供商获取的用户信息会有差别,所以会提供一个ApiAdapter这个接口来适配。Connection的一个默认实现是OAuth2Connection
3.ConnectionFactory
用于创建Connection信息的接口,这个Factory包含了ServiceProvider接口和ApiAdapter接口,也就是这个Connection工程通过ServiceProvider获取用户信息,然后适用ApiAdapter来将获取到的用户信息封装为Connection。
4.UsersConnectionRepository
我们获取到服务提供商的用户信息后,可能映射到我们业务系统的用户信息会有一些差别,比如我们从微信中获取到的openId是XXXXXX,但是在我们的业务系统中可能存储的对应用户是ZZM,那么这个时候我们就需要一个Repository帮我们做映射和存储。UsersConnectionRepository就是做这件事情的,它提供了一个默认实现JdbcUsersConnectionRepository。
综上,SpringSocial提供了这些组件来帮助我们完成授权登录,这些组件被一个叫做SocialAuthenticationFilter的Spring Security过滤器使用,帮助我们完成开发第三方登录。如下图所示:
一个完整的登录请求处理流程如下:
。
这个流程对大家来说还比较抽象,我将在下一篇文章中开发一套QQ和微信的第三方登录来帮助大家理解。这里大家只需要记住SpringSocial中各个组件模块的作用就好。