社交登录又称作社会化登录(Social Login),是指网站的用户可以使用腾讯QQ、人人网、开心网、新浪微博、搜狐微博、腾讯微博、淘宝、豆瓣、MSN、Google等社会化媒体账号登录该网站。
前言
在上一章Spring-Security源码分析三-Spring-Social社交登录过程中,我们已经实现了使用Spring Social
+Security
的QQ社交登录。本章我们将实现微信的社交登录。(微信和QQ登录的大体流程相同,但存在一些细节上的差异,下面我们来简单实现一下)
准备工作
- 熟悉OAuth2.0协议标准,微信登录是基于OAuth2.0中的authorization_code模式的授权登录;
- 微信开放平台申请网站应用开发,获取
appid
和appsecret
- 熟读网站应用微信登录开发指南
- 参考Spring-Security源码分析三-Spring-Social社交登录过程的准备工作
为了方便大家测试,博主在某宝租用了一个月的appid和appSecret
appid | wxfd6965ab1fc6adb2 |
---|---|
appsecret | 66bb4566de776ac699ec1dbed0cc3dd1 |
目录结构
api
定义api绑定的公共接口config
微信的一些配置信息connect
与服务提供商建立连接所需的一些类。
定义返回用户信息接口
public interface Weixin {
WeixinUserInfo getUserInfo(String openId);
}
这里我们看到相对于QQ的getUserInfo
微信多了一个参数openId
。这是因为微信文档中在OAuth2.0的认证流程示意图第五步时,微信的openid
同access_token
一起返回。而Spring Social
获取access_token
的类AccessGrant.java
中没有openid
。因此我们自己需要扩展一下Spring Social
获取令牌的类(AccessGrant.java
);
处理微信返回的access_token类(添加openid)
@Data
public class WeixinAccessGrant extends AccessGrant{
private String openId;
public WeixinAccessGrant() {
super("");
}
public WeixinAccessGrant(String accessToken, String scope, String refreshToken, Long expiresIn) {
super(accessToken, scope, refreshToken, expiresIn);
}
}
实现返回用户信息接口
public class WeiXinImpl extends Abs