www.cftea.com

QQ 的快速登录原理(BS、CS 混合的单点登录)

ITPOW2017/2/17 9:51:33

如果我们在本机电脑上启动了 QQ,再使用浏览器访问 QQ 邮箱登录页,这个页面会提示我们已经登录了的 QQ。

QQ 快速登录

它是怎么做到的呢?

有人说是控件。控件也许能够实现,但会影响用户体验,QQ 用的是更先进的思路。

QQ 会内置一个小型的 Web Server,提供类似 IIS、Apache 的功能。

访问 QQ 邮箱登录页,这个网页会去访问这个 Web Server,由于是同一台机子访问,所以地址就是:127.0.0.1(实际是 https://localhost.ptlogin2.qq.com:4301/,这个域名指向的是 127.0.0.1,用域名的好处是可以解决 Cookie 跨域等权限问题。),由于这个 Web Server 是 QQ 建立的,所以 QQ 可以根据自己的登录状况给访问者返回对应的信息。

(要验证以上信息:可以用 Chrome 访问 QQ 邮箱登录页,然后按 F12,切换到 Network 标签,从列表中找到 pt_get_uins 开头的,鼠标移上去就可以看到全网址。)

完了?

显然没那么简单,那我的网页也去访问一下,且不是也获取了用户的登录信息和登录凭据?我拿到这个登录凭据是不是我也可以冒名登录?

所以这里面既要防止他人获取我是否已经登录了这种隐私,还要防止他人获取登录凭据。

所以这就要 QQ 邮箱服务器配合,比如可以这样做:

  • 先访问邮箱服务器,邮箱服务器产生一个真随机数,比如 123,并存起来,并将 123 交给浏览器。
  • 浏览器拿到 123 后用这个去访问 127.0.0.1 服务。
  • 127.0.0.1 凭 123 向邮箱服务器询问,123 是否有效?
  • 邮箱服务器说 123 有效,并产生一个凭据 abc,并存起来,并将 abc 交给 127.0.0.1。
  • 127.0.0.1 将 abc 反馈给浏览器,浏览器再凭 abc 去邮箱服务器登录。

为防数据窃听,传输全部是 HTTPS。以上只是一种方式,实际可能是其他方式,也可能更复杂。

<<返回首页<<