扫码登录是如何实现的?

来源:07素材网 10月26日 19:48

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

三种角色

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

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

从账号密码登录说起

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

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

二维码包含什么呢?

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

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

APP认证机制

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

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

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

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

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

3、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博客

Description

Token是啥

sessiontokencookie区别

为什么使用token?

token与session的不同主要在

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

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

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

原文出处:https://blog.csdn.net/weixin_40757930/article/details/123926066
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。

头条

在使用SQLite3时遇到的几个坑

在使用SQLite3时遇到的几个坑

《本打算在SQLite3数据库里执行一个查询语句,使用的是php语言,起初遇到的是权限问题: permission denied,因为SQLite3数据库文件和PHP执行者属于两个不同的用户,首先需要对这个文件执行mode 777的权限开放,然后,又遇到了下面这样的PHP错误