扫码登录项目实践

朱治龙
2022-09-06 / 0 评论 / 25 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年09月06日,已超过855天没有更新,若内容或图片失效,请留言反馈。

背景说明

随着移动端应用的普及,扫码登录在日常的登录认证过程中已经非常普及了,在提升用户便利的同时,由于减少了账号密码的输入,在一定程度上也起到了增强安全性的目的。

随着控制台产品的迭代,PC端界面及功能已趋于稳定,考虑到目前移动终端更便于用户使用,经过公司内部层层审批,控制台移动端的项目顺利立项。作为充分为用户提供便利的移动端应用,扫码登录功能便自然的纳入了起基础功能。

登录认证的本质

扫码登录本质上也是一种登录认证方式。既然是登录认证,要做的也就两件事情!

  • 告诉系统我是谁
  • 向系统证明我是谁

比如账号密码登录,账号就是告诉系统我是谁, 密码就是向系统证明我是谁;
比如手机验证码登录,手机号就是告诉系统我是谁,验证码就是向系统证明我是谁;

那么扫码登录是怎么做到这两件事情的呢?扫码登录过程中移动端是已登录状态,这两件事对移动端而言都是明确的,登录过程中的重点是怎么把移动端的登录状态传递给PC端。
在这个过程中主要就是通过扫码的二维码了,二维码本质上就是一串具有唯一性的字符串。通过这个字符串便可以将已登录方授权未登录端进行登录了。

技术方案

根据项目实际情况,参与扫码登录的应用为console-ui、consent、console-biz、app:

  • console-ui :控制台前端,需登录的应用
  • consent :用户认证端
  • console-biz :控制台后端服务
  • app :移动端应用,微信端H5网页

实现流程

在使用超算云服务控制台应用时,由 console-ui 判断用户是否登录,未登录的情况下将自动跳转到 consent 进行登录操作,本需求将修改consent登录界面,在已有的账号登录基础上增加扫码登录机制,默认采用账号登录方式,当用户切换登录方式为扫码登录时,将调用console-biz提供的接口获取 scanId,使用 QRCode.js 生成携带scanId参数的app端网页认证URL的二维码。用户使用微信扫一扫功能,可直接打开app端的指定页面,在该页面完成用户确认授权操作,consent通过轮询二维码状态接口,当获取到用户在 app端的确认操作后,携带 scanId 参数跳转到 console-ui,在console-ui 调用接口获取用户 token 信息完成登录。整体交互流程如下所示:
扫码登录流程

二维码生命周期

码登录的核心是对二维码生命周期的管理,为了更好地理解扫码登录过程,将上图中二维码生命周期相关的核心流程梳理如下:
l7pyt88l.png

二维码状态数据字典

字典项字典值说明
未使用1获取scanId时设置初始状态为该值
已扫码(未授权)2app端扫码后更新状态为已扫码
已授权(登录)3在app授权界面单击“确认授权”
已使用4在app端授权界面确认授权,然后在console-ui中获取到用户token后
已过期5超过5分钟redis中不存在记录则返回该值
取消授权(登录失败)6在app授权界面单击“取消授权”

数据存储方案

scanId作为整个扫码登录过程的核心,后端需存储scanId整个生命周期的状态值及需交换的用户数据,而每个 scanId 仅有5分钟的有效期,基于 Redis 的过期策略很容易就能实现这个目的,且比关系型数据库在数据存取上有更优异的表现。故本功能模块相关的数据统一存储于 Redis。

后端实现方案

后端基于现有的console-biz工程添加新的接口用于前端对接,相关接口见“接口设计”章节。

前端实现方案

在需求中参与前端开发工作的有consent、console-ui、app三端。
1、consent:负责登录界面的交互及展示,基于QRCode.js实现二维码生成,轮询获取二维码状态。
2、console-ui:在获取到consent授权回调后,通过scanId调用接口获取用户token实现用户在PC端登录。
3、app:扫码后直接跳转到app指定的授权页面,进入授权页面后实现。扫码操作的入口有两个:微信扫一扫、app应用首页顶部的扫一扫。使用app应用首页的扫一扫功能需要解析获取二维码URL中的scanId,然后跳转到授权页面进行授权操作。
4、单击某功能时使用component组件渲染对应功能的抽屉功能进行显示

接口设计

后端以 Restful API 方式为前端提供接口,根据项目情况涉及的接口列表如下:

  • 获取scanId接口(PC端调用)
  • 获取scanId状态接口(PC端轮询调用)
  • app端扫码接口
  • app端授权接口
  • 授权成功后获取登录信息接口(PC端调用)

效果截图

相关功能将在控制台移动端功能上线后,所有并行用户可线上体验。

一、PC端截图:

1、初始状态:
l7pz7i9l.png
2、刷新时有个 gif加载动图:
l7pz7xch.png

3、已扫码:
l7pz8a17.png

4、已失效:
l7pz8m1w.png

5、取消授权:
l7pz90n0.png

二、移动端截图:

1、正常状态:
l7pz9fx0.png

2、已被使用:
l7pz9toe.png

3、单击取消授权:
l7pza449.png
4、单击确认授权:
l7pzag0f.png

5、授权操作时二维码已过期:
l7pzawpf.png

0

评论 (0)

取消