Fork me on GitHub

登录_手机扫描pc二维码的原理梳理

先明确概念:

问:二维码是什么?

答:二维码其实就是一串字符串,条形码其实就是一串数字。二维码内容可以是惟一的 ID,也可以是包含该 ID 的地址。

问:app 首次进入时需要输入用户名密码登录,但之后不再需要就可以直接进入,这是为什么?

答:因为 token 机制。

token 机制

需要注意的是:1. token 就是一个带有特殊含义的字符串。2. 校验时用到你的设备信息,这部分是唯一的,所以别人知道了你的 token ,但拿不到你的设备信息,也是白给。

扫码登录简介

归根结底,是在 pc 上生成 pc token 的过程。

  • pc 的任务:接收用户登录请求,发送二维码生成请求,等待 token,接收 token 并完成登录

  • 服务器的任务:生成二维码,等待手机端扫码(主要是发来的身份信息)并生成临时 token并发回手机端,等待用户确认登录并生成 pc token并发回 pc 端。

  • 手机端的任务:扫码,接收临时 token 并引导用户确认登录。

扫码登录三大细节

  1. pc 生成待扫描的二维码。

    值得注意的是:此时二维码和 pc 设备信息都传递给了 server端。拿到设备信息是为了验证的需要。此时系统并不知道访问者是谁。

  2. 手机端扫码。

    扫码时,server 可以拿到此二维码,也拿到了身份信息,server 明确了访问者。使用临时 token,是为了 userId 被传递时的安全考量。只待用户在手机上确认登录后,就可以生成 pc token 了。

  3. 用户点击确认,pc 端完成登录。

    pc 会一直轮询 server 并同步更新二维码状态。

粘一下知乎中吕十田的科普解释:

1、你用浏览器打开http://wx.qq.com的时候,微信给你随机分配了一个链接,【相当于给你开了间房,房号1024,注意,只给你房号,没给你钥匙】,用二维码包装着,并且设置了有效时间【10分钟你不进房间,就给你取消】。这里面没有用户什么事情,所以不存在UID(user ID),只是一个随机的字母和数字组合。
2、二维码的转码规则是统一的,所以意味着,只要是个二维码扫描软件,谁都能拿到这个链接,微信可以扫出来,我查查也可以扫出来。
3、所以拿到链接没有用,重要的是谁拿到链接,微信拿到了,就可以从微信客户端发一条信息给服务器,告诉服务器,现在是谁使用了某个链接,其他二维码扫描软件,不能和微信服务器通话,所以毫无价值。【你拿到了房号,就给酒店老板打个电话,说是我,老板就知道张三又来开房了,其他人没有老板电话,知道房号也没用】
4、这时候,在你刚打开的浏览器窗口里面,就知道并显示了你的信息,理论上可以直接打开聊天窗口,但是为了不突兀不尴尬,微信选择再让你在手机上做一个确认操作。【你站到你的房间门口了,老板也知道你是张三了,并且把你的那个好基友也放到了你房间里,但是谁知道你基友会在房间里干点啥?如果他正好弯腰在捡肥皂,这时候恰好你后面有人经过,房门大开大家尴尬不尴尬?所以还是老板考虑周到,他要你在电话里确认一下才给你开门,你大可以等后面没人了再开门进去】
5、好了,现在你可以进去好好享用你的基友了。

本部分参考自

  1. 极客时间江涌的《二维码扫描登录是什么原理?》

  2. 吕十田的知乎回答:微信扫描二维码登录网页是什么原理

-------------The End-------------