目录
我们来分析一下,扫码登录,其实涉及到三种角色
,需要解决两个问题
。
三种角色
很明显,扫码登录当中涉及到的三种角色: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也不用过期,所以这就是我们可以一次登录,长久使用的原理。
扫码登录流程
-
访问PC端二维码生成页面,PC端请求服务端获取
二维码ID
-
服务端生成相应的
二维码ID
,设置二维码的过期时间,状态等。 -
PC获取
二维码ID
,生成相应的二维码。 -
手机端扫描二维码,获取
二维码ID
。 -
手机端将
手机端token
和二维码ID
发送给服务端,确认登录。 -
服务端校验
手机端token
,根据手机端token
和二维码ID
生成PC端token
-
PC端通过轮询方式请求服务端,通过
二维码ID
获取二维码状态,如果已成功,返回PC token
,登录成功。
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扩展性的弊端。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92825.html