对于大多数的网站、APP都有第三方登录这个功能,自己也做过几次,最近做的passport项目又用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享:
三个开放平台注册账户获取AppKey和AppSecret
QQ互联地址:https://connect.qq.com/intro/login
微信开放平台地址:https://open.weixin.qq.com/
新浪微博开放平台地址:http://open.weibo.com/
一、QQ互联
申请互联审核通过后创建网站应用,如下图:
点击查看APPID和APPkey
Step1:获取Authorization Code
pc获取code地址:https://graph.qq.com/oauth2.0/authorize;获取方式发送HTTP GET请求
Step2:通过Authorization Code获取Access Token
pc获取token地址:https://graph.qq.com/oauth2.0/token,获取方式发送HTTP GET请求
Step3:获取openID
pc 获取openID的地址:https://graph.qq.com/oauth2.0/me,获取方式发送HTTP GET请求
Step4:获取qq用户信息
获取用户信息地址:https://graph.qq.com/user/get_user_info
二、微信互联
申请互联审核通过后创建网站应用,如下图:
微信不开发平台不保存appsecret,申请应用成功时一定要记住
第一步:请求CODE:
第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login。
第二步:通过code获取access_token
通过code获取access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
第三步:通过access_token调用接口
获取access_token后,进行接口调用,有以下前提:
1. access_token有效且未超时;
2. 微信用户已授权给第三方应用帐号相应接口作用域(scope)。
对于接口作用域(scope),能调用的接口有以下:
授权作用域(scope)接口接口说明
snsapi_base/sns/oauth2/access_token通过code换取access_token、refresh_token和已授权scope
/sns/oauth2/refresh_token刷新或续期access_token使用
/sns/auth检查access_token有效性
snsapi_userinfo/sns/userinfo获取用户个人信息
其中snsapi_base属于基础接口,若应用已拥有其它scope权限,则默认拥有snsapi_base的权限。使用snsapi_base可以让移动端网页授权绕过跳转授权登录页请求用户授权的动作,直接跳转第三方网页带上授权临时票据(code),但会使得用户已授权作用域(scope)仅为snsapi_base,从而导致无法获取到需要用户授权才允许获得的数据和基础功能。
三、新浪微博互联
先申请应用
第一步:请求用户授权code
地址:https://api.weibo.com/oauth2/authorize
第二步:获取授权token
地址:https://api.weibo.com/oauth2/access_token
第三步:获取授权用户uid
地址:https://api.weibo.com/oauth2/get_token_info
第四步:根据用户uid获取用户信息
地址:https://api.weibo.com/2/users/show.json
发送GET请求
互联的时候注意创建应用时的设置的回调地址和项目里的回调地址保持一致,不然第一步获取code后接下来就无法回调
作者:yljava
链接:https://www.jianshu.com/p/8faaad6e9aec
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。