二维码登陆的原理思考

我们举个简单例子,我们平时生活中二维码移动、PC登陆是很长见的事情,那么这个简单的实现蕴藏着很多的技术,这里我只是对于移动扫描登陆这种场景进行分析下,不对之处请各位大佬指出。

举个例子,我们一般常用的阿里系应用,支付宝和阿里云服务平台之间的登陆,我们手机一般 支付宝保持着登陆状态,在PC端使用阿里云的时候我一般不习惯于账号、密码登陆方式,而是直接扫描二维码登录:

二维码登陆的原理思考_第1张图片

这里是一个登陆的典型页面,大致过程首先我们点开登陆选择二维码登录方式,拿出我们的手机扫描二维码,扫描成功后手机就会重定向到扫描登陆确认界面,确认是否是本地人登陆,确认后 PC端提示已扫描请确认,确认后PC登陆成功。大概流程如下:

二维码登陆的原理思考_第2张图片

  1. 扫码前,手机端应用是已登录状态,PC 端显示一个二维码,等待扫描

  2. 手机端打开应用,扫描 PC 端的二维码,扫描后,会提示"已扫描,请在手机端点击确认"

  3. 用户在手机端点击确认,确认后 PC 端登录就成功二维码登陆的原理思考_第3张图片

  • 二维码的背后它一定存在一个唯一性的 ID,当二维码生成时,这个 ID 也一起生成,并且绑定了 PC 端的设备信息

  1. 手机去扫描这个二维码

  2. 二维码切换为 已扫描待确认状态, 此时就会将账号信息与这个 ID 绑定

  3. 当手机端确认登录时,它就会生成 PC 端用于登录的 token,并返回给 PC 端

  • 二维码准备阶段,就是我们在PC端,点击登陆并选择扫码登陆

  • 二维码登陆的原理思考_第4张图片

  1. PC 端向服务端发起请求,告诉服务端,我要生成用户登录的二维码,并且把 PC 端设备信息也传递给服务端

  2. 服务端收到请求后,它生成二维码 ID,并将二维码 ID 与 PC 端设备信息进行绑定

  3. 然后把二维码 ID 返回给 PC 端

  4. PC 端收到二维码 ID 后,生成二维码(二维码中肯定包含了 ID)

  5. 为了及时知道二维码的状态,客户端在展现二维码后,PC 端不断的轮询服务端,比如每隔一秒就轮询一次,请求服务端告诉当前二维码的状态及相关信息

  • 进行扫描

  • 二维码登陆的原理思考_第5张图片

  • 用户用手机去扫描 PC 端的二维码,通过二维码内容取到其中的二维码 ID

  • 再调用服务端 API 将移动端的身份信息与二维码 ID 一起发送给服务端

  • 服务端接收到后,它可以将身份信息与二维码 ID 进行绑定,生成临时 token。然后返回给手机端

  • 因为 PC 端一直在轮询二维码状态,所以这时候二维码状态发生了改变,它就可以在界面上把二维码状态更新为已扫描

  • 手机端确认

  • 二维码登陆的原理思考_第6张图片

  • 手机端在接收到临时 token 后会弹出确认登录界面,用户点击确认时,手机端携带临时 token 用来调用服务端的接口,告诉服务端,我已经确认

  • 服务端收到确认后,根据二维码 ID 绑定的设备信息与账号信息,生成用户 PC 端登录的 token

  • 这时候 PC 端的轮询接口,它就可以得知二维码的状态已经变成了"已确认"。并且从服务端可以获取到用户登录的 token

  • 到这里,登录就成功了,后端 PC 端就可以用 token 去访问服务端的资源了

整个扫描登陆的过程大致流程就是这样。

你可能感兴趣的:(spring,boot)