我们来分析一下,扫码登录,其实涉及到三种角色,需要解决两个问题。
三种角色
很明显,扫码登录当中涉及到的三种角色: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是啥
oken与session的不同主要在
①认证成功后,会对当前用户数据进行加密,生成一个加密字符串token,返还给客户端(服务器端并不进行保存)
②浏览器会将接收到的token值存储在Local Storage中,(通过js代码写入Local Storage,通过js获取,并不会像cookie一样自动携带)
③再次访问时服务器端对token值的处理:服务器对浏览器传来的token值进行解密,解密完成后进行用户数据的查询,如果查询成功,则通过认证,实现状态保持,所以,即时有了多台服务器,服务器也只是做了token的解密和用户数据的查询,它不需要在服务端去保留用户的认证信息或者会话信息,这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,解决了session扩展性的弊端。
————————————————
版权声明:本文为CSDN博主「trigger333」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40757930/article/details/123926066
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.