扫码登录是「已认证设备给未认证设备授权」的委托过程。流程:1)网页端向服务端申请二维码,服务端生成一次性 ticket(如 UUID)并返回,网页展示含 ticket 的二维码,ticket 状态为「待扫描」;2)手机 App 扫码解析出 ticket,带上自己的登录态(token)调服务端确认接口,ticket 状态变「已扫描」,网页端此时显示头像等待确认;3)手机上点「确认登录」,服务端校验 App 端 token、把 ticket 状态变「已确认」并绑定生成网页端会话 token;4)网页端通过轮询或长连接获知 ticket 状态变化,拿到 token 完成登录。

设计要点:状态机——待扫描/已扫描/已确认/已过期/已取消,ticket 短时效(2~5 分钟)且一次性使用;网页端获知状态用长轮询或 WebSocket 优于高频轮询;安全考量——ticket 不可猜测(足够熵)、确认必须来自已认证 App 且显示登录设备信息防误授权、防止二维码被截屏中继(短时效 + 一次性 + 异地登录提醒)、登录后 ticket 立即作废。追问方向:与 OAuth2 Device Code Flow(电视等设备授权)的异同、轮询/长轮询/WebSocket/SSE 四种网页端通知方式的成本对比、为什么确认步骤不能省(只扫码即登录会让钓鱼二维码直接劫持会话)。

(约 440 字)