基于Spring的QQ第三方登录实现

之前我们完成了基于Spring的Github第三方登录--通用化的第三方登陆实现以及基于Spring的新浪微博第三方登录实现,接下来我们来学习一下如何实现QQ第三方登录。

完善个人信息

在实现QQ第三方登录功能之前,需要前往QQ互联完善个人信息,并添加你的第三方应用的相关信息。

访问QQ互联,点击【管理中心】,进入应用开发者完善界面:

alter-text

创建第三方应用

按要求注册应用者开发信息后,进入应用管理中心,点击【创建应用】,选择网站,按要求填写相关信息,与微博一样,QQ也需要填写网站地址以及验证是否是网站所有者,验证方法和微博一样,都是在首页添加一行代码,同时,还需要填写回调地址:

alter-text

创建成功后我们就能得到相应的appId以及appKey

第三方登录通用架构

同样,我们将添加基于Spring的Github第三方登录--通用化的第三方登陆实现中的通用化架构

alter-text

QQApi

首先,添加QQApi,为OAuthService提供进行OAuth验证的各个地址,相关的地址可以在QQ OAuth2.0开发文档中得到,最终的QQApi代码如下:

public class QQApi extends DefaultApi20 {
    
    private static final String AUTHORIZE_URL = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=%s&redirect_uri=%s&state=%s";
    private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s";
    private static final String ACCESS_TOKEN_URL = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&state=%s";
    
    private final String qqState;
    
    public QQApi(String state){
        this.qqState = state;
    }
    
    @Override
    public String getAuthorizationUrl(OAuthConfig config) {
        if (config.hasScope()){
          return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), 
                  qqState, OAuthEncoder.encode(config.getScope()));
        }
        else{
          return String.format(AUTHORIZE_URL, config.getApiKey(), OAuthEncoder.encode(config.getCallback()), qqState);
        }
    }

    @Override
    public String getAccessTokenEndpoint() {
        return String.format(ACCESS_TOKEN_URL, qqState);
    }

}

QQOAuthService

接下来我们来添加QQOAuthService,查看文档《QQ 如何获取用户open_id》,通过地址https://graph.qq.com/oauth2.0/me获取用户的open id,并将其转换成OAuthUser

public class QQOAuthService extends OAuthServiceDeractor {
    
    private static final String PROTECTED_RESOURCE_URL = "https://graph.qq.com/oauth2.0/me";

    public QQOAuthService(OAuthService oAuthService) {
        super(oAuthService, OAuthTypes.QQ);
    }

    @Override
    public OAuthUser getOAuthUser(Token accessToken) {
        OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
        this.signRequest(accessToken, request);
        Response response = request.send();
        OAuthUser oAuthUser = new OAuthUser();
        oAuthUser.setoAuthType(getoAuthType());
        oAuthUser.setoAuthId(response.getBody());
        oAuthUser.setUser(new User());
        return oAuthUser;
    }

}

配置QQOAuthService

最后添加QQOAuthService的相关配置:

@Configuration
public class OAuthConfig {
    
    private static final String CALLBACK_URL = "http://tianmaying.com/oauth/%s/callback";
    
    @Value("${oAuth.qq.state}") String state;
    @Value("${oAuth.qq.appId}") String qqAppId;
    @Value("${oAuth.qq.appKey}") String qqAppKey;
    
    @Bean
    public QQApi qqApi(){
        return new QQApi(state);
    }
    
    @Bean
    public OAuthServiceDeractor getQQOAuthService(){
        return new QQOAuthService(new ServiceBuilder()
                .provider(qqApi())
                .apiKey(qqAppId)
                .apiSecret(qqAppKey)
                .callback(String.format(CALLBACK_URL, OAuthTypes.QQ))
                .build());
    }

}

修改hosts

与新浪微博一样,修改hosts一遍进行本地调试。

windows系统hosts文件一般在C:\WINDOWS\system32\drivers\etc

mac系统hosts文件地址一般为:/etc/hosts

在hosts文件添加以下一行:

127.0.0.1       tianmaying.com

调试

进入根目录,运行sudo mvn spring-boot:run命令,访问http://tianmaying.com (之前填写应用信息以及修改hosts时所填写的域名,这三个域名必须一致),由于必须通过域名进行访问,所以我们需要监听80端口,运行时需要超级管理员权限。

注意:将代码上线后,还需要经过QQ的审核,进入QQ 应用管理中心,按要求进行填写即可。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值