你笑了

你的笑,是星星跳跃浪花的笑

0%

扫码登录

简介

同一产品具有移动端App和PC端应用,为方便用户在PC端登录,在PC端提供一个登录二维码,使用移动端App扫码并确认登录,然后在PC端登录成功

时序图

流程

PC端发起扫码登录

  1. PC端请求后端获取二维码

  2. 后端根据一些信息(ID)生成二维码,返回二维码图片数据和二维码ID

    • 返回二维码二进制流,通过自定义请求头返回二维码ID(需配置 Access-Control-Expose-Headers),前端直接通过blob显示二维码图片
    • 返回二维码ID和二维码静态目录地址,前端再通过地址请求二维码图片

    或仅返回二维码ID,由前端生成二维码图片

  3. 后端保存二维码ID并维护其扫码状态

    • 已过期

      对二维码设置过期时间,前端轮询到二维码状态已过期则再次请求后端获取二维码

    • 未扫码

      生成新的二维码默认为”未扫码”状态,仅在该状态下允许APP的登录请求(只能使用一次,防止重放攻击)

      接收到APP的登录请求后,先验证该二维码状态是否为”未扫码”,如果是则改为”扫码中”,如果不是则返回错误

    • 已扫码待确认

    • 已确认

PC端轮询扫码状态

  1. PC端请求后端获取扫码状态(通过二维码ID)

用户APP扫码确认登录

APP端是登录状态

  1. 用App自带的扫码功能,扫描浏览器中的二维码,提取二维码中的登录信息(ID)
  2. APP将二维码信息(ID)和当前用户的token一起提交给后端,发起登录请求
  3. 后端确认用户token有效后
    1. 将ID和token(用户信息)关联起来
    2. 修改二维码状态为”已扫码待确认”
    3. 生成临时 token并返回
    4. 将ID和临时token关联起来
  4. APP显示登录确认页面,这个页面可以是App的Native页面,也可以是远程H5页面
  5. 用户点击确认或者同意按钮后,App携带临时token发起确认登录请求

PC端登录成功

  1. 后端确认临时token有效后
  2. 修改二维码状态为”已确认”
  3. 根据ID获取用户信息,生成新的PC端token
  4. 查询状态接口返回已确认状态和PC端token