一、安全设计类问题
-
如何防止二维码被恶意截屏复用?
- 动态刷新机制:二维码ID绑定PC设备指纹,10秒自动失效并重新生成
- 加密混淆:对二维码内容进行非对称加密,仅目标APP可解密
-
临时Token的防重放攻击方案?
- 一次性使用:服务端标记临时Token状态,确认后立即失效
- 时间戳+IP双因子校验
二、高并发场景优化
-
轮询导致服务端压力大,如何优化?
- 长轮询+WebSocket混合:扫码前用长轮询,扫码后切换WebSocket推送
- 分级轮询策略:未扫码时低频(5秒/次),扫码后高频(1秒/次)
-
Redis集群中二维码状态同步延迟怎么处理?
- 本地缓存+版本号:PC端缓存状态版本,服务端返回增量变更
三、异常场景设计
1. 移动端确认后PC端断网,如何恢复登录?
服务端持久化登录态,PC端重连后通过设备ID自动恢复会话
以下是PC端断网后确认扫码登录状态的完整技术方案:
-
持久化登录凭证机制
- PC端首次生成二维码时,服务端会将二维码ID与设备指纹(如浏览器指纹4)绑定存储到Redis,有效期通常为5分钟
- 移动端扫码确认后,服务端会将该设备指纹标记为"已授权"状态
-
断网状态检测与恢复
// PC端检测网络恢复后的处理逻辑 window.addEventListener('online', () => { const deviceId = getBrowserFingerprint(); // 获取设备唯一标识 axios.post('/session/restore', { deviceId }) .then(res => { if (res.data.loggedIn) { updateAuthState(res.data.token); // 恢复登录态 } }); }); -
服务端验证流程
-
接收设备ID后,服务端会检查:
- 该设备是否存在未过期的授权记录
- 移动端扫码确认时间是否在有效期内
- 会话令牌是否未被撤销
-