当前位置:文档之家› web实现QQ第三方登录

web实现QQ第三方登录

web实现QQ第三方登录
web实现QQ第三方登录

开放平台-web实现QQ第三方登录 --------肖宏伟

应用场景

web应用通过QQ登录授权实现第三方登录。

操作步骤

1 注册成为QQ互联平台开发者,https://www.doczj.com/doc/c05945875.html,/

2 准备一个可访问的域名,如https://www.doczj.com/doc/c05945875.html,

3 创建网页应用,配置必要信息,其中包括域名以及回调地址;

其中域名需要验证,需确保对域名主机有足够的控制权限

4 获取应用appID、appKey进行开发

登录流程

开发平台的登录授权采取oauth2.0机制,这也是目前几乎所有互联网开放平台所采取的方式。

需更多了解oauth2.0可参考阮老师的文

章:https://www.doczj.com/doc/c05945875.html,/blog/2014/05/oauth_2_0.html

实现方式

client-side

流程:

前端页面通过Implict方式登录授权 -> 回调获得accessToken -> 获取openid -> 同步用户信息并登录

为了保证数据安全,在获取用户信息并登录这一步必须由服务端实现。

这种方式的开发相对便捷,也是后面的实战案例将要采取的方式。

server-side

流程:

由server端页面跳转到登录授权页面(Authorization code方式) -> 回调获得code -> 置换accessToken -> 获取openid -> 同步用户信息并登录

可参考:

https://www.doczj.com/doc/c05945875.html,/%E5%BC%80%E5%8F%91%E6%94%BB%E7%95%A5_serve r-side

SDK使用

JSSDK 可快捷实现前端登录授权的功能,可自定制登录按钮

使用文档:

https://www.doczj.com/doc/c05945875.html,/js_sdk%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E 缺点:存在浏览器兼容风险,此外登录按钮UI的定制也存在受限

JavaSDK 屏蔽了oauth授权的复杂度,方便后端实现授权及api操作缺点:增加依赖jar包,项目容易变得臃肿,尤其是当前项目已经存在oauth功能实现时可不必采用。

案例实战

功能描述

clientside + server-side 通过QQ网页授权登录,并获取用户信息

1 本地开发环境准备

修改hosts文件将https://www.doczj.com/doc/c05945875.html,映射到127.0.0.1;

本地服务器以80端口启动,windows下可能会出现80端口被系统进程占用的情况,解决方法可参

考https://www.doczj.com/doc/c05945875.html,/littleatp/p/4414578.html

本地服务器启动后,以https://www.doczj.com/doc/c05945875.html,的域名进行访问,在QQ登录授权时可通过域名验证这一步

2 登录跳转页面

QQ登录跳转

AccessToken:--ExpireIn

id="expire">

OpenID:

功能描述

页面在第一次打开时跳转到QQ登录授权页面;

授权成功之后回到当前页面通过url参数(hash串)获得accessToken;

此后可通过jsonp方式获取用户的openid,url如:https://https://www.doczj.com/doc/c05945875.html,/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN 获取到用户OpenID,返回包如下(JSONP方式获取):callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} ) 将access_token及openid传到服务端进行处理

3 server端获取用户信息

接收openid的页面方法

/**

* 登录结果

*

* @param access_token

* @param openid

*/

public static void login_result(String access_token, String openid) {

//调用api获取qq用户信息

QQUserInfo user = QQApi.getUserInfo(access_token, openid);

//此时若取得user信息,则可以进行保存,并执行用户登录操作

....

//登录成功后跳转

redirect(xxx);

}

QQApi的实现

/**

* QQ互联API

*

*

* 登录流程:

*

* 1 前端跳转qq授权页面

* 2 js获得access_token

* 3 通过jsonp方式获得openid

* 4 server端根据上传的access_token及openid获取用户信息,如昵称、头像

*

* 参考文档:

*

https://www.doczj.com/doc/c05945875.html,/%E5%BC%80%E5%8F%91%E6%94%BB%E7%95%A5_clien t-side#Step2.EF.BC.9A.E8.8E.B7.E5.8F.96AccessToken

*

*

* @author xxx

* @createDate 2015年3月10日

*

*/

public class QQApi {

public static String appId = "xxx";

public static String appSecret = "xxx";

public static String baseUrl = "https://https://www.doczj.com/doc/c05945875.html,";

protected static final String URL_GET_USERINFO = baseUrl

+

"/user/get_user_info?access_token=%s&oauth_consumer_key=%s&openid=%s" ;

protected static final long ACCESS_TIMEOUT = 15;

protected static final String DEF_APP_TOKEN_EXPIRE = "3h";

/**

* 获取用户信息

*

*

* https://www.doczj.com/doc/c05945875.html,/get_user_info

*

*

* 调用地址:

* https://https://www.doczj.com/doc/c05945875.html,/user/get_user_info

* 参数

* access_token=*************&

* oauth_consumer_key=12345&

* openid

*

* 返回结果如下:

* {

* "ret": 0,

* "msg": "",

* "is_lost": 0,

* "nickname": "小吞",

* "gender": "女",

* "province": "广东",

* "city": "广州",

* "year": "1993",

* "figureurl":

"https://www.doczj.com/doc/c05945875.html,/qzapp/101207268/982C9FEADAF7B242C5069B8F390784 BF/30",

* "figureurl_1":

"https://www.doczj.com/doc/c05945875.html,/qzapp/101207268/982C9FEADAF7B242C5069B8F390784 BF/50",

* "figureurl_2":

"https://www.doczj.com/doc/c05945875.html,/qzapp/101207268/982C9FEADAF7B242C5069B8F390784 BF/100",

* "figureurl_qq_1":

"https://www.doczj.com/doc/c05945875.html,/qqapp/101207268/982C9FEADAF7B242C5069B8F390784BF/4 0",

* "figureurl_qq_2":

"https://www.doczj.com/doc/c05945875.html,/qqapp/101207268/982C9FEADAF7B242C5069B8F390784BF/1 00",

* "is_yellow_vip": "0",

* "vip": "0",

* "yellow_vip_level": "0",

* "level": "0",

* "is_yellow_year_vip": "0"

* }

*

*

* @param accessToken

* @return

*/

public static QQUserInfo getUserInfo(String accessToken, String openid) {

if (StringUtils.isEmpty(accessToken) ||

StringUtils.isEmpty(openid)) {

return null;

}

String url = String.format(URL_GET_USERINFO, accessToken, appId, openid);

String resultString = DefaultHttp.get(url, ACCESS_TIMEOUT, GlobalConstants.UTF_8);

Logger.debug("[sso-qq]get userinfo. use url '%s'", url);

QQUserInfo userinfo = JsonUtil.fromJson(resultString, QQUserInfo.class);

if (userinfo == null || !userinfo.hasGot()) {

Logger.debug("[sso-qq]get userinfo failed, with result of '%s'", resultString);

return null;

}

Logger.debug("[sso-qq]get userinfo success, with result of '%s'", resultString);

return userinfo;

}

简单的web浏览器

网络程序设计课程设计报告 专业网络工程 学号09102125 姓名赵旭阳 2012 年12月日

一、课程设计目的与任务 1.目的 (1)加深对计算机网络的基本概念和原理,以及网络编程接口Socket概念及编程原理的理解; (2)提高学生网络应用与编程、分析与解决实际问题的能力,为大型网络编程打下坚实基础; (3)通过撰写课程设计报告,锻炼学生的逻辑组织和语言表达能力; (4)培养学生理论运用于实践的综合应用和设计创新能力。 通过本次课程设计,使学生进一步理解、领会C#语言和网络编程技术,把所学的知识运用到具体的程序设计当中去,编写一个接近实际的应用程序。 本课程设计是一门综合性实验。 通过本次课程设计,掌握.net应用程序设计;加深对TCP/IP协议的理解;掌握C/S编程模式;掌握Socket机制、传输控制协议;用户数据报协议;掌握网络抓包的原理;掌握网络编程应用程序分析、设计、编程和调试的整个过程。 2.任务 (1)设计完成与网络应用相关题目的网络应用软件; (2)调试运行之后,要求边演示边解释设计的思想、过程及采用的方法; (3)完成课程设计报告。 二、课程设计的基本要求 1.熟练掌握网络的基本概念和原理; 2.熟练掌握网络编程接口Socket概念及编程原理; 3.掌握基于TCP/IP的Internet编程技术; 4.掌握各种软件开发工具的使用过程及方法。 三、设备及工具 硬件:微机120台以上,I3以上处理器,1024M以上内存、Ethernet网卡,交换机软件:Windows2000/XP操作系统,VS2010编程环境。 6.主要参考资料(文献) 1. 《TCP/IP—协议分析与应用编程》人民邮电出版社李峰 2. 《TCP/IP协议与网络编程》西安电子科技大学出版社任泰明 3. 《TCP/IP协议及网络编程技术》清华大学出版社罗军舟 4. 《C#网络编程技术教程》人民邮电出版社金华

简易IE浏览器设计报告

C#程序设计 设计说明书 简易IE浏览器的设计与实现 学生姓名:郭成成 学号:1103380106 班级:计算机(一)班 专业:计算机应用技术 指导教师:胡老师

课程设计任务书 2011—2012 学年第二学期 课程设计名称:C#课程设计 设计题目:简易IE浏览器的设计与实现 完成期限:自 2012 年 11 月 8 日至 2011 年 11 月 29 日共 3 周 设计依据、要求及主要内容: 根据程序设计所学知识,设计与实现一个简单浏览器,该简单浏览器设计的内容和功能要求如下: (1)有合理的首页页面设计,背景柔和。 (2)有多个按钮,比如说前进、后退、刷新删除等。 (3) 输入地址栏,支持所有的网址,并有转到功能。 (4)设计登陆页面。 (5) 可以存储网址,进行网内连接。 (6)是利用 C#编写程序,该浏览器简单但功能齐全。 (7) 使用时同样可以最大化最小化。 (8)按钮是利用画图工具进行拷贝下来的。 (9) 地址默认为百度。 要求:系统功能设计基本完善,并写出详细的设计说明书。

摘要 关键词:关键词:前进、后退、刷新、输入合法地址、运行程序,在网内搜索,使用 vs2005 中的 C#编写程序,利用画图工具。拷贝前进、后退按钮。 1 课题描述 利用C#编写简单的程序,创建一个简易IE浏览器,包含基本的功能,培养编写程序的兴趣。实践中了解浏览器的一些特性 2 程序设计流程图 2.1 系统说明 使用 win7 系统,vs2005 中的控制台应用程序,设计主界面,并拖放按钮。具有一 般浏览器的基本功能,前进、后退、刷新、地址等。在输入地址栏。设默认地址为百度,便于使用,刷新功能,在网速不是太好,有一点卡时,刷新一下,主界面可以最 大化和最小化。使用绿色为边框颜色,用画图工具拷贝文件按钮,设有六个小按钮, 包括前进、后退、删除、刷新、转到等按钮。 2.1 主界面的设计主界面用纯白色背景,界面以中等大小为宜。使用绿色为边框颜色,用画图工具拷贝文件按钮,设有六个小按钮,包括前进、后退、删除、刷新、转到等 按钮。主界面用纯白色背景,界面以中等大小为宜。 3 功能的设计 3.1 主界面功能的设计 主界面功能的设计主界面打开时,显示空白背景。地址为默认的百度 3.2 后退功能的设计 后退功能的设计当打开网页时,想浏览之前的网页,不需要重新打开,只需按倒退按钮,就可以浏览之前的网页,这是退后按钮的功能 3.3 浏览功能的设计 浏览功能的设计浏览基本的网页视频、文本文件等,浏览新闻杂志,打开别的网页 4 测试 4.1 系统测试

简易浏览器设计报告

目录 目录 (1) 一、课程设计的目的与要求 (2) 二、题目说明 (2) 2.1程序开发背景................................................................... 错误!未定义书签。 2.2开发工具介绍 (2) 三、总体设计 (2) 3.1.系统开发平台: (2) 这个简易浏览器由Java语言编写,用Eclipse编译执行 (2) 3.2.系统流程图: (3) 3.3功能结构图: (3) 四、详细说明 (4) 4.1 系统实施 (4) 五、遇到的问题和解决方法 (9) 六、课程设计总结 (10)

一、课程设计的目的与要求 加深学生对面向对象概念以及JAVA面向对象程序设计思想的理解和掌握;使学生熟悉开发一个项目的基本过程,培养学生分析问题和解决问题的能力,增强学生的动手能力。为后续学习和应用打下一定的基础。 二、题目说明 本程序实现一个简单的浏览器。用户通过在URL输入框中输入要下载的网络页面的网址,并点击浏览器界面上相应的按钮,或直接按回车键,就能完成网络页面下载的功能。同时,它还支持浏览本地HTML文件,用户在输入框中输入文件所在盘符及具体路径,并按回车键,或者点击界面上相应按钮,实现浏览本地文件的功能。它能够实现页面的文本链接,能够显示网页图片,并能够通过相应按钮的操作返回上一次访问的页面,还可以通过相应按钮返回后退之前访问的页面。该简易浏览器能帮助用户实现基本的网页浏览功能。 2.2开发工具介绍 三、总体设计 3.1.系统开发平台: 这个简易浏览器由Java语言编写,用Eclipse编译执行

简单IE浏览器设计报告

C#程序设计 设计说明书简易IE浏览器的设计与实现 学生姓名:郭成成 学号:1103380106 班级:计算机(一)班 专业:计算机应用技术

指导教师:胡老师 课程设计任务书 2011—2012 学年第二学期 课程设计名称:C#课程设计 设计题目:简易IE浏览器的设计与实现 完成期限:自 2012 年 11 月 8 日至 2011 年 11 月 29 日共 3 周 设计依据、要求及主要内容: 根据程序设计所学知识,设计与实现一个简单浏览器,该简单浏览器设计的内容和功能要求如下: (1)有合理的首页页面设计,背景柔和。 (2)有多个按钮,比如说前进、后退、刷新删除等。 (3) 输入地址栏,支持所有的网址,并有转到功能。 (4)设计登陆页面。 (5) 可以存储网址,进行网内连接。 (6)是利用 C#编写程序,该浏览器简单但功能齐全。

(7) 使用时同样可以最大化最小化。 (8)按钮是利用画图工具进行拷贝下来的。 (9) 地址默认为百度。 要求:系统功能设计基本完善,并写出详细的设计说明书。 摘要 关键词:关键词:前进、后退、刷新、输入合法地址、运行程序,在网内搜索,使用vs2005 中的 C#编写程序,利用画图工具。拷贝前进、后退按钮。 1 课题描述 利用C#编写简单的程序,创建一个简易IE浏览器,包含基本的功能,培养编写程序 的兴趣。实践中了解浏览器的一些特性 2 程序设计流程图 2.1 系统说明 使用 win7 系统,vs2005 中的控制台应用程序,设计主界面,并拖放按钮。具有一 般浏览器的基本功能,前进、后退、刷新、地址等。在输入地址栏。设默认地址为百度,便于使用,刷新功能,在网速不是太好,有一点卡时,刷新一下,主界面可以最 大化和最小化。使用绿色为边框颜色,用画图工具拷贝文件按钮,设有六个小按钮,包括前进、后退、删除、刷新、转到等按钮。 2.1 主界面的设计主界面用纯白色背景,界面以中等大小为宜。使用绿色为边框颜色,用画图工具拷贝文件按钮,设有六个小按钮,包括前进、后退、删除、刷新、转到等按钮。主界面用纯白色背景,界面以中等大小为宜。

推荐-基于Web浏览器的桌面虚拟化系统 精品

基于Web浏览器的桌面虚拟化系统 华中科技大学 硕士学位 基于Web浏览器的桌面虚拟化系统 姓名:梁小锋 申请学位级别:硕士 专业:计算机软件与理论 指导教师:廖小飞 20XX-01-16 华中科技大学硕士学位

摘要 近年来,随着计算机性能的日益提升,网络带宽越来越大,绿色节能的呼声越 来越大,虚拟化技术在资源整合以及安全隔离等方面的优势日渐突出,成为学术界 和工业界关注的热点。桌面虚拟化技术是目前虚拟化领域的研究热点。围绕着桌面 虚拟化的用户体验,学术界和工业界都做了相当多的研究工作。但目前,桌面虚拟 化系统中的关键技术仍然面临着诸多挑战:如何以随处执行的理念提高系统易用性; 如何设计高效的图形压缩与多窗口集成机制以提高用户体验等。 基于 Web 浏览器的桌面虚拟化系统(WebDesk )有效地解决了上述问题。其核

心设计思想是:把网络应用程序和本地的桌面应用程序集成到一个虚拟的工作环境 中,并以浏览器为载体提供登录与使用的方式。用户在该平台上不仅可以使用互联 网上第三方服务商提供的应用服务,还可以使用原生的桌面应用程序。WebDesk 主 要技术如下:通过部署用户请求中心来处理用户请求,建立客户端与应用程序服务 器的连接;使用 JavaScript 构建一个用户界面框架,把多个应用整合到一个页面中; 在后台截获应用程序窗口的图像更新,并通过远程传输协议传输到应用传输单元, 在客户端显示;通过窗口同步技术来同步用户端和服务端的应用窗口;通过把数据 传输通道迁移到物理机中,直接读取虚拟机显示缓存的方式来优化图像传输

性能。 为了验证 WebDesk 的功能并测试其性能,设计了一个真实的集群硬件环境,并 通过部署桌面虚拟化系统建立了一个实验性的安全办公环境。功能测试表明, WebDesk 可以实现的窗口图像的传输和窗口控制操作,整合网络应用服务和原生的 桌面应用程序的功能。性能测试表明,在 WebDesk 中,用户打字平均延时约 52 毫 秒,图像传输平均延时约为 190 毫秒,而视频传输质量为 82.7%。 关键字:桌面虚拟化,瘦客户端,图像传输 I 华中科技大学硕士学位

一个简易的JavaScript网页图片浏览器

效果演示: https://www.doczj.com/doc/c05945875.html,/slideshow/ 难点:响应鼠标事件实现滑动效果 项目目录: files文件夹下的几个文件夹都是放的图片,fullsize里面是大图,thumbs里面是小图。其中那个.png文件是测试用的图片 页面部分: