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