> 文档中心 > 扫码登录是如何实现的?

扫码登录是如何实现的?

面试官:如何实现扫码登录功能?

目录

账号密码登录说起

二维码包含什么呢?

APP认证机制

扫码登录流程

Token是啥


我们来分析一下,扫码登录,其实涉及到三种角色,需要解决两个问题

三种角色

很明显,扫码登录当中涉及到的三种角色:PC端手机端服务端

相关的设计都要围绕这三端来展开,具体的设计其实就是每一端应该完成什么功能?应该怎么实现?端和端应该如何交互?
 

从账号密码登录说起

 如果用普通的账号密码方式登录认证,PC端通过账号密码完成认证,然后服务端给PC端同步返回token key之类的标识,PC端再次请求服务端,需要携带token key,用于标识和证明自己登录的状态。

服务端响应的时候,需要对token key进行校验,通过则正常响应;校验不通过,认证失败;或者token过期,PC端需要再次登录认证,获取新的token key。

二维码包含什么呢?

二维码在我们这个场景里面是一个重要的媒介,服务端必须给这个数据生成唯一的标识作为二维码ID,同时还应该设置过期的时间。PC端根据二维码ID等数据生成二维码。

同时,服务端也应该保存二维码的一些状态:未扫描已成功已失效

APP认证机制

我们还得认识一下基于APP的移动互联网认证机制。

首先,手机端一般是不会存储登录密码的,我们我们发现,只有装载APP,第一次登录的时候,才需要进行基于账号密码的登录,之后即使这个清理掉这个应用进程,甚至手机重启,都是不需要再次输入账号密码的,它可以自动登录。

这背后有一套基于token的认证机制,和PC有些类似,但又有一些不同。

  • APP登录认证的时候除了账号密码,还有设备信息

  • 账号密码校验通过,服务端会把账号与设备进行一个绑定,进行持久化的保存,包含了账号ID,设备ID,设备类型等等

  • APP每次请求除了携带token key,还需要携带设备信息。

因为移动端的设备具备唯一性,可以为每个客户端生成专属token,这个token也不用过期,所以这就是我们可以一次登录,长久使用的原理。

扫码登录流程

  1. 访问PC端二维码生成页面,PC端请求服务端获取二维码ID

  2. 服务端生成相应的二维码ID,设置二维码的过期时间,状态等。

  3. PC获取二维码ID,生成相应的二维码。

  4. 手机端扫描二维码,获取二维码ID

  5. 手机端将手机端token二维码ID发送给服务端,确认登录。

  6. 服务端校验手机端token,根据手机端token二维码ID生成PC端token

  7. PC端通过轮询方式请求服务端,通过二维码ID获取二维码状态,如果已成功,返回PC token,登录成功。

扫码登录是如何实现的?_程序猿DD_的博客-CSDN博客

Token是啥

session,token,cookie区别_trigger333的博客-CSDN博客

为什么使用token?session与token的区别_sinat_34191046的博客-CSDN博客_token和session

token与session的不同主要在

①认证成功后,会对当前用户数据进行加密,生成一个加密字符串token,返还给客户端(服务器端并不进行保存)

②浏览器会将接收到的token值存储在Local Storage中,(通过js代码写入Local Storage,通过js获取,并不会像cookie一样自动携带)

③再次访问时服务器端对token值的处理:服务器对浏览器传来的token值进行解密,解密完成后进行用户数据的查询,如果查询成功,则通过认证,实现状态保持,所以,即时有了多台服务器,服务器也只是做了token的解密和用户数据的查询,它不需要在服务端去保留用户的认证信息或者会话信息,这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,解决了session扩展性的弊端。