1.应用场景
扫码支付、扫码登录
2.二维码登录本质
二维码登录跟一般的账号密码登录一样,都需要做登录认证,所以需要做以下两件事情:
1.告诉系统我是谁?
2.向系统证明我是谁?
比如账号密码登录:账号就是用来告诉系统我是谁,密码则向系统证明我是谁。
手机号验证码登录:手机号告诉系统我是谁,验证码向系统证明我是谁。
那扫码登录是如何做到这两件事情的呢?
1.手机端扫描PC端二维码,手机端确认授权后,账号就在PC端登录了,这一步操作其实已经告诉了系统我是谁,完成了第一件事情。
2.第二件事情,向系统证明我是谁。跟密码或者验证码登录不同,扫码登录的过程中并没有通过这两种方式向系统证明我是谁,那它如何证明呢?
因为手机端是已经通过登录认证的,所以说只要扫码确认是这个手机且这个账号登录的,就已经间接证明了我是谁。
3.一维码和二维码
一维码就是超市商品的那种条形码,实际上就是一串数字,存储的是商品的序列号。
二维码与条形码类似,它存储的是json字符串,我项目中生成了二维码--保存的是json字符串
4.系统认证机制
以微信为例
当我们打开这个应用时,第一次登录时,需要账号密码来登录,之后手机重启或者关闭这个应用再重新打开,都不需要再次输入账号密码,就可以自动登录。
基于token的认证机制是如何运行的。
1.账号密码登录时,客户端会将设备信息一起传递给服务器端。
2.如果账号密码校验通过,服务器端会把账号与设备信息进行绑定,存储到一个数据结构中。
3.服务器端生成一个token,用来映射数据结构,通过token可以找到对应的账号和设备信息。
4.客户端将服务器端返回的token保存到本地,每次访问系统的时候都会带上这个token。
5.服务器端通过该token找到与它绑定的账号和设备信息,与数据库中的信息进行比较;如果相同则校验通过,返回响应数据,
如果不同,校验失败,拒绝访问。
5.扫描二维码登录的步骤
1.大概流程
1)扫码前手机端是登录状态,PC端展示一个二维码,此时二维码是待扫描状态。
2)手机端扫码二维码,提示:已扫码,请在手机端确认。
3).手机端点击确认后,PC端登录成功。
4).PC端二维码有三个状态:待扫描一已扫描待确认一已确认。
2.二维码准备
1.PC 端向服务器发送请求,告诉服务器我要生成二维码,并将PC端设备信息也发送给服务器端。
2.服务器端收到请求后,生成二维码ID,并将二维码ID与设备信息进行绑定。
3.服务器端将二维码ID返回给PC端。
4.PC 端根据收到的二维码ID 生成二维码。
5.为了及时知道二维码的状态,客户端在展示二维码之后,不断向服务器端发送轮询请求,比如每隔一秒轮询一次,请求服务器端告知当前二维码的状态以及设备信息
3.扫码状态切换
1.用户通过手机扫码PC端的二维码获取二维码的ID.
2.调用服务器端API将二维码ID与身份信息发送给服务器端.
3.服务器端接收后,将二维码ID与身份信息进行绑定,生成临时token,返回给手机端,这个临时token的作用就是一个身份凭证告诉服务器端在手机端执行确认登录操作时,与之前扫码的操作是同一部手机执行的。
4.状态确认
1.手机端在接收到临时 token 时会弹出确认登录界面,用户点击确认时,手机端携带临时token用来调用服务器端的接口,告诉服务器
境,我已确认。
2.服务器型收到确认后,根据二维码D绑定的设备信息和账号信息,生成用于PC录的token.
3.这时PC端的轮询接口,就可以得到服务器端的二维码状态变成了已确认,并且从服务器病获取用户登录用的token.
4.到这里,登录就成功了,PC 端可以根据 token 去访问登录状态下的服务器端的资源了。