前言
这个问题之前很好解决,使用浏览器 plugin 即可。
但是随着 Chrome 和 Firefox 都先后放弃了 NPAPI plugin,这一方法也行不通了,而且很多人是很讨厌 plugin 的。
但是在默认禁止了 NPAPI 的 Chrome 版本,QQ 依然可以实现快速登录(一键登录),是怎么做到的呢?
原理
其实不难猜。既然不存在 plugin,无法以此来实现浏览器内和本地客户端的直接通信,那么排除其他的黑科技,有一种很简单的方法可以实现这个效果。
那就是在客户端开一个 Server,在浏览器里面请求这个地址。
理论上这样是可以实现的,至于 QQ 是不是用的这种方法,稍微验证下好了。
验证
找一个有 QQ 快速登陆的页面,比如 mail.qq.com登陆 QQ 客户端打开浏览器的 Developer Tools -> Network 刷新页面,观察所有请求的 domain。 很明显,我们要找的完整请求 url 是这样的
看看这个请求的 Response Content
1 | var var_sso_uin_list=[ |
很明显是当前登录的用户信息, ping 一下这个请求的 domain, 不出所料结果是 127.0.0.1
1 | ping localhost.ptlogin2.qq.com |
现在我们验证下是否是 QQ 开了这个 Server
查看哪个程序占用了 4301 端口
1 | netstat -ano | findstr "4301" |
得到 pid 我们就可以看否是 QQ 在监听这个端口了
1 | tasklist | findstr "4152" |
可能有人担心会不会有安全问题,会不会其他网站访问这个 url 就拿走用户信息?其实挺容易解决,存一个 token 到服务器端,获取的时候校验下就好了。
但是归根到底取决于腾讯对这方面安全的重视程度和意愿了,至少之前是确实存在从网页上获取当前登录的 QQ 信息的方法,虽然问题不是出在快速登录这部分。
模拟
接下来我用GOLang模拟这种技术实现
1 |
|
其中域名 localhost.ya2.top 配置指向解析记录:127.0.0.1
测试效果:
搞定,这只是一个简单的DEMO,但是了解原理已经足够了。 欢迎大佬指正~