http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 12327|回复: 6

[C#语言基础] 腾讯的网站如何检测到你的 QQ 已经登录?

[复制链接]
发表于 2015-5-6 08:25:01 | 显示全部楼层 |阅读模式
腾讯的网站如何检测到你的 QQ 已经登录?(异构系统单点登录 SSO(single-sign-on)
腾讯网站检测QQ已经登录,实现快速登录,是典型的异构系统单点登录 SSO(single-sign-on)技术。腾讯用NPAPI实现的。



通过登录链接:http://xui.ptlogin2.qq.com/cgi-bin/qlogin,检测已登录QQ。
查看源码,ptlogin 的 js文件发现用ActivexObject浏览器插件。
q_hummerQtrl = new ActiveXObject(“SSOAxCtrlForPTLogin.SSOForPTLogin2″);
但ActiveX是IE插件,不支持Chrome,FireFox。腾讯使用了古老的 NPAPI(Netscape Plugin Application Programming Interface)接口。NPAPI 几乎支持所有主流浏览器,包括 FireFox、Chrome、Opera(IE 从 5.5 后停止支持 NPAPI,转而使用 ActiveX)。
打开 chrome://plugins/发现自动登录插件Tencent SSO Platform(QQ QuickLogin Helper)



在路径 C:\Program Files (x86)\Common Files\Tencent\TXSSO\Bin下SSO 的动态链接库。



np前缀表示np插件,npSSOAxCtrlForPTLogin.dll,按照NPAPI插件编程的写法,放在浏览器会加载的地方,用的时候写个标签就可以在 js 里面调用了。于是跨浏览器(无视 IE)的插件开发变得相当可行。运行在 NPAPI 插件中的代码拥有当前用户的所有权限,不在沙箱中运行,所以它的扩展程序在被 Chrome 网上应用店接受前要求人工审核。(不过今年年底Chrome将完全移除对NPAPI的支持,转而推广自己的NACL)
其他网站用这个插件来检测用户的QQ登录,create ActiveXObject 会加载失败。因为腾讯在 dll中就对域名进行了限制。但如果在host文件加一条:127.0.0.1 xui.ptlogin2.qq.com
再用 xui.ptlogin2.qq.com 这个域名去访问本地的这个html,就可以正常拿到 QQ 相关信息。说明判断域名的时候是在这个dll中判断的,所以网页无法篡改。腾讯对于域名限制挺严格的,如xue.ptlogin2.qq.com  xue.ptlogin2.paipai.com等才能成功,而www.qq.com就不成功了。这些域名都指向同一个服务器,202.106.195.30,说明腾讯用户信息使用独立服务器。




以前通过IE加载项InstallHelper Class 和SSOForPTLogin2 Class实现,但查看IE加载项:



没有发现SSOForPTLogin2 Class,估计AccountProtectBHO Class有关。

网上有几种错误的猜测:
①保存在Cookie或文件中,用js读,但浏览器有沙箱功能,js一般无法读取。而且就算清空Cookie依然有效。
②服务器记录IP,CPU等硬件设备hash值,依赖环境过多,不可能。
③QQ 启动某端口监听,js 连接此端口。用 netstat 查看发现QQ 并没有监听。
单点登录机制:当用户第一次访问 ERP系统的时候,因为还没有登录,就被引导到认证中心进行登录(1);根据用户登录信息,认证中心进行身份验证,如果通过,就返回一票据(ticket)给用户(2);用户再访问其他应用系统的时候(3,5)就会带上这个票据,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证中心进行效验,检查ticket的是否合法(4,6)。如果通过效验,用户不需要重新登陆就可访问EFP系统和EIP系统了,即”一次登录,多方认证[2]”。



CAS 最基本的协议过程:




1、支持多浏览器的插件:FireBreath(新技术,建议采用)、NPAPI(Mozilla官网,太老了)
2、京东的sso:Cookie方式,登陆后保存为ceshi3.com的cookie值,将该值加密后得到参数C,用js将C值发送到所有京东域名下,如sso.360top.com/sign? c=……,sso.jcloud.com/sign? c=……,所有域名都使用统一的凭据,这样就实现了。
3、sina微博SSO:与Yale-CAS原理一致。
4、淘宝的SSO:用JS获取跨域的cookie,tmall向taobao页面发送请求,淘宝获取当前域下所有cookie,然后合并成js代码发给tmall。tmall采用 jsonp 的方式跨域加载该 js 代码,检测taobao的cookie,判断是否登陆。为避免其他页面恶意获取cookie,淘宝只有Referer为自己分站时才返回数据。
5、CAS是开源的SSO解决方案,应用最广,基于cookies来存储用户(TGT)Ticket,如果CS客户端,使用 CAS 的 RestFul API 来进行登录验证,或者webservice。CAS是java的,但客户端可以用.net,但依赖性太强,应仔细研究,并用.net实现CAS的基本功能的SSO。

6、 Authorization可以用DotNetOpenAuth 实现SSO
7、OAuth 2.0协议,开放授权

8、构建RESTful服务














1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2015-5-6 08:25:24 | 显示全部楼层
看过帖子回复一下是个好习惯
 楼主| 发表于 2015-5-6 08:25:41 | 显示全部楼层
占座
回复

使用道具 举报

 楼主| 发表于 2015-5-6 08:27:21 | 显示全部楼层
:lol:lol:lol:lol:lol:lol
 楼主| 发表于 2015-5-6 08:27:33 | 显示全部楼层
使劲顶
回复

使用道具 举报

 楼主| 发表于 2015-5-6 08:28:05 | 显示全部楼层
将来一定要自己做一个异构单点登录的通用权限管理系统。
发表于 2015-5-6 10:45:37 | 显示全部楼层
插件检测的
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-16 01:49

© 2014-2021

快速回复 返回顶部 返回列表