QQ第三方登陆,OAuth2.0,不用官方SDK实现

现在很多网站都会用第三方登陆,对于用户,无需注册,直接用QQ等第三方帐号登录,方便了账户管理,不然账号太多了,谁还记得?对于网站来说,用户的登陆门槛低了,客户多了自然也是好处多多。好了,本文就来讲讲怎么通过QQ来实现第三方登陆。

需要先了解下OAuth2.0协议,现在已经抛弃1.0版本,毕竟是有漏洞。不点击打开链接了解也没关系,代码还是能写出来,无伤大雅。

贴出官方文档,了解一下。。。。点击打开链接

其实看官方文档就可以弄出来了,我写这篇博客只是记录自己遇到的一些问题。

首先说下流程:

0.在编写代码之前,你需要先有一个QQ互联的开发者账号,去QQ互联注册一个就可以了,需要审核,如实填写,大概2-3天(反正我审核没过。。。委屈),注册完后,需要新建应用,我用的是公司现成,如果小伙伴想注册的话,需要先有一个已经备案的域名,如果没有,那就没法进行开发了难过,填写相应的回调地址,这个回调地址是下面一步成功后,QQ会访问的地址,这个地址的业务逻辑就是由你来写的了。具体的可以看慕课网上的QQ登陆视频。关于windows上修改host文件,可以点击这里查看,确保域名填写正确。

1.当用户点击第三方登陆的按钮时,跳转到QQ的OAuth验证页面。如下图:


页面会自动检测你登陆的QQ,点击头像就可以实现QQ的登陆验证,这是QQ来完成的,我们不需要编写任何代码。

要完成这一步,我们需要在JS上绑定事件,让其跳转,跳转地址:https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=你的appID&redirect_uri=你的回调地址,其他参数比如state,用于第三方应用防止CSRF攻击,我没写,但你可以写,具体可以看文档,scope参数是用来选择用户所需要提供的权限的,用默认的就可以了。

只要你按照上面的请求发,是绝对可以发成功的,而且JS跳转,只需要location.href就可以了,一样是可以发起https请求的。

2.但第一步完成后,QQ回调你的地址,这时候你的本机ip已经绑定了域名了,是可以直接被访问到的(前提你已经修改了本地host文件,或者回调地址用localhost,但不建议),然后你需要在这个请求里面写上相应的逻辑。QQ在回调的时候会把code传过来,你需要在request中取,然后你需要在java中发起https请求,来获取access_token,下面是地址:https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=你的APPID&client_secret=你的appCode&code=你得到的CODE&state=你的STATE&redirect_uri=你的回调地址,其中state如果不做验证的话,随意。

要用JAVA发起https请求,emmmm,如果公司框架没有这个的话,只能手动写,建议用HttpClient,有时间我整理一下这个。这里记录下我碰到的一个问题,发起https请求时,报错:Could not generate secret,不要慌张,这是eclipse的问题,可以看这篇文章。然后将获得的字符串,截取一下,就能获得access_token。

当你获得access_token后,发起https请求https://graph.qq.com/oauth2.0/me?access_token=你的access_token,然后你就能获得一个拥有openid的字符串,截取出来,你就能获得openid了,这就是最终目的。

总结一下,先通过OAuth验证页面,回调可得code,利用code可得access_token,然后得到openid。

虽然步骤挺简单,但是需要你先获得appid和appcode,还需要审核,挺麻烦的。

而且你需要会用JAVA手动发起https请求,没接触过就会很疼。

如果有什么不明白的可以在下方留言,我也是接触了一两天而已,有错的希望能指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值