一、Oauth协议实现第三方登录
(一)注册成为开发者
网址:https://connect.qq.com
1.使用QQ账号登录
2.手机QQ授权登录(打开手机QQ,确认登录)
3.登录成功
4.单击应用管理,继续注册流程
1)填写QQ互联开发者信息
2)提示验证邮件已发送至上述邮箱
3)前往邮箱激活
4)注册成功
(二)创建应用、获取appid和appkey
应用接入前,需要先申请appid和appkey,用于后续流程中对网站和用户进行验证和授权。
网站应用创建完成后,即可获取appid和appkey。
审核未通过前无法创建应用
审核通过,可以创建应用
创建网站应用
资料填写
应用创建成功
二、SDK下载
SDK(Software Development Kit) 软件开发工具包。
腾讯QQ互联平台提供了PHP SDK,辅助开发者快速接入QQ登录、分享等功能。
提供的SDK基于OAuth2.0协议。
PHP SDK v2.1下载,网址:
sznk.fcloud.store.qq.com/store_raw_download?buid=16821&uuid=8a0b8bcb43291bf901432e18ccd10015&fsname=qqConnect_Server_SDK-php_v2.1.zip
三、网站开发流程
1.申请appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。
接入QQ登录时,网站需要不停的和Qzone进行交互,发送请求和接受响应。
对于PC网站,请在你的服务器上ping graph.qq.com ,保证连接畅通。
2.放置“QQ登录”按钮
1)下载“QQ登录”按钮图片,并将按钮放置在页面的合适位置(如登录、注册页面)
“QQ登录”按钮图片如下:
2)在前台登录页面(/view/default/simple/login.html)添加“QQ登录”按钮
在前台登录页面(/view/default/simple/login.html)添加js代码(弹出QQ登录对话框)
3.获取Authorization Code、Access Token、OpenId
通过用户验证和登录,获取Access_Token,为下一步获取用户的OpenID做准备,Access_Token也是应用在调用OpenID访问和修改用户数据时必须传入的参数。
1)获取Authorization Code
请求地址:https://graph.qq.com/oauth2.0/authorize
请求方法:get
请求参数:
附加参数完整请求地址:
返回说明:
如果用户成功登录并授权,则会跳转到指定的回调地址,并在redirect_uri地址后带上Authorization Code和原始的state值。
此code会在10分钟内过期。
2)通过Authorization Code获取Access_Token
可在回调URL对应的程序中接受请求,并完成获取Access Token的工作。
请求地址:https://graph.qq.com/oauth2.0/token
请求方法:get
请求参数:
附加参数的完整请求地址:
返回说明:
如果成功返回,即可在返回包中获取到Access Token。 如:
access_token=FE04*CCE2&expires_in=7776000&refresh_token=88E4BE14。
可以回调URL对应的程序中接受请求,并完成获取Access Token的工作。
提示:
获取到的access token具有3个月有效期,用户再次登录时自动刷新。
第三方网站可存储access token信息,以便后续调用OpenAPI访问和修改用户信息时使用。
3)使用Access Token获取用户的OpenID
通过输入上面获取到的Access_Token,可得到对应用户身份的OpenID。
OpenID是此网站上或应用中唯一对应用户身份的标识,网站或应用可将此ID进行存储,便于用户下次登录时辨识其身份,或将其与用户在网站上或应用中的原有账号进行绑定。
请求地址:https://graph.qq.com/oauth2.0/me
请求方法:get
请求参数:
附加参数的完整请求地址:
返回说明:
网站接入时,获取到用户OpenID,返回包如下:
4.OpenAPI调用说明
获取到Access Token和OpenID后,可通过调用OpenAPI来获取或修改用户个人信息。
建议网站在用户登录后,即调用get_user_info接口,获得该用户的头像、昵称并显示在网站上,使用户体验统一。
1)调用OpenAPI接口
QQ登录提供了用户信息/动态同步/日志/相册/微博等OpenAPI(详见下图所示的API列表),网站需要将请求发送到某个具体的OpenAPI接口,以访问或修改用户数据。
调用所有OpenAPI时,除了各接口私有的参数外,所有OpenAPI都需要传入基于OAuth2.0协议的通用参数:
2)示例
以get_user_info接口为例:
(请将access_token,appid等参数值替换为你自己的)
https://graph.qq.com/user/get_user_info?access_token=YOUR_ACCESS_TOKEN&oauth_consumer_key=YOUR_APP_ID&openid=YOUR_OPENID
成功返回后,即可获取到用户数据:
5.示例代码(面向过程)
四、PHP SDK解析
使用官方提供的PHP SDK中代码实现第三方登录,获取Authorizon Code、Access Token、OpenID、登录用户基本信息。
(一)文件结构、功能
1.API/class目录
1)ErrorClass.class.php
异常输出类
2)Oauth.class.php
包含下述三个方法:
qq_login方法——弹出QQ登录页面、请求Authorizon Code
qq_callback——使用Authorzion Code获取Access Token
get_openid方法——使用Access Token获取OpenID
3)QC.class.php
QC类,api外部对象,调用接口全部依赖于此对象,QC类继承OauthQQ类,通过调用QC类及继承类的方法,实现功能
4)Recorder.class.php
写入或读取数据
URL.class.php
通过数组(包含请求参数的数组)构造出请求需要使用的完整URL
2.API/common目录
1)config.php
定义了表示路径的常量。
2)utils.php
此文件包含了认证过程中需要用到的公用方法(使用file_get_contents或curl请求远程数据)。
3.API/Oauth目录
Index.php
Callback.php
五、OAuth2.0简介
1.什么是“QQ登录OAuth2.0”
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。
QQ登录OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于之前的OAuth1.0协议,其认证流程更简单和安全。
2.QQ登录OAuth2.0接入方式
QQ登录OAuth2.0支持网站接入和移动应用接入。
网站可通过以下两种方式接入:
1)使用QQ互联提供的SDK包,用户体验统一,只需要修改少量代码,不需要理解验证授权流程,需要快速接入QQ登录的网站和移动应用可选用此方法。
2)根据QQ登录OAuth2.0协议,自主开发,此方法自定义程度较高,需要与现有系统进行整合的网站和移动应用可选用此方法。
六、常见问题
1.什么是回调地址域名?
用户点击QQ登录跳转到QQ登录页面,登录成功后,应该跳转回网站。回调地址即在这里用来指定跳转回网站的URL。回调地址注册的目的是为了保障第三方APPID帐户的安全,以免被其他恶意网站盗用。
需注意:
- 需要填写到站点接收qq登录信息的接口;
- 具体跳转URL将在程序中指定路径以及请求参数进行构造。例如:http://网站首页域名/api/oauth/QQ/callback.php