我们常见的登录方式有账号密码登录,手机号验证码登录等,其本质都在做两件事情:
1、 我是谁
2、 证明我是谁
账号&手机号是在表明“我是谁”,密码和验证码是在证明“我确实是谁”。
token的认证机制
1、 在登录时,客户端会向服务端传送账号&密码&设备信息进行认证
2、 服务端认证通过后,生成token(身份凭证
)与设备信息进行绑定,并存储在服务端后将token回传给客户端
3、 客户端每次访问API时,需要携带token&设备信息作为验证信息
4、 服务端验证token通过后,返回API响应,否则请求失败
扫码登录原理
而通过扫描二维码进行登录认证,原理主要基于token的认证机制和二维码的状态变化实现。
在扫码过程中,二维码有着不同的状态
1、 待扫描
2、 已扫描待确认
3、 已确认
例如我们使用微信登录掘金
左边是待扫描状态,右边是已扫描待确认状态,第三种已确认时,掘金会进入登录验证步骤。
上图之后的就是手机端进行确认登录的操作
我们来探究下在这一过程中,服务端&客户端&PC端都做了什么?
1、 PC端打开微信登录页面时,会携带设备信息向服务端发送请求,服务端生成二维码ID与设备进行绑定,然后回传二维码ID给PC端,PC端以二维码的形式显示。此时二维码状态为待扫描
2、 PC端会通过轮询的方式向服务端查询二维码的状态是否发生了变化
3、 客户端打开微信扫一扫,扫描PC端二维码,会获取其中的二维码ID,然后客户端将二维码ID和客户端身份信息token发送给服务端,服务端将二维码ID与token绑定,并生成临时token返回客户端。此时二维码状态改变为已扫描待确认,PC端因轮询页面会随之改变。
4、 当客户端确认登录时,会将临时token传给服务端,服务端验证临时token通过后,改变二维码状态为已确认,并生成PCToken,PC端轮询二维码状态为已确认时,服务端会返回PCToken,后续PC端通过PCToken进行操作
临时token只会使用一次,之后就会失效