涉及三个端: 服务器, 浏览器, 客户端
- 服务器
- 生成浏览器会话 id, 包含有效期
- 使用 app token + 浏览器会话 id 换取浏览器 token
- 更新浏览器会话 token 状态
- 浏览器
- 获取服务器会话 id, 生成二维码 (内容是 http 地址)
- ajax 携带二维码轮询请求服务器, 获取二维码状态 (已过期 / 待确认登录 / 已登录 / 已取消)
- app
- 扫码, 判断是登录地址, 携带 app token, 访问二维码地址, 提示是否确认登录
- 服务器将该浏览器会话 id 标记为已登录
总结: 浏览器使用服务器提供的会话 id 轮询查询其状态, app 携带 token 扫码后会更新该浏览器会话 id 状态和浏览器 token, 即扫码登录成功