拿二维码扫描登录这件事来说,其实它的本质就是一种登录认证方式,二维码在中间共有 3 个状态:待扫描、已扫描待确认、已确认。
在待扫描状态下,PC 端向服务端发送请求,告诉服务端我要生成用于登录的二维码,并把 PC 端设备信息也传递给服务端。服务端收到请求后,生成二维码 ID,并将 ID 与 PC 端设备信息绑定,之后把二维码 ID 返回给 PC 端。一来一回,PC 端收到二维码 ID 后,就生成了二维码。
用户用手机扫完 PC 端二维码之后,获取了其中的二维码 ID,再调用服务端 API,将移动端的身份信息与二维码 ID 一起发给服务端。服务端将二者绑定,并生成一个临时 token 返回给手机端。这时候,二维码状态就变成了“已扫描”。
手机端在收到临时 token 后,会弹出确认登录界面。用户点击确认时,手机端携带临时 token,调用服务端接口,告诉服务端我已经确认。服务端收到确认后,根据二维码 ID 绑定的设备信息与账号信息,生成用于 PC 端登录的 token。这时候, 这时候,二维码状态就变成了“已确认”。
由此可见,通过二维码进行扫码登录,并不是把你的账号密码从手机端传给了 PC 端,而是通过 token 认证机制来实现的。当然,如果你碰到了可疑的二维码,安全起见,还是不扫为妙。