前言
本文主要来研究一下..登录的相关场景和原理。
使用场景
主要的场景有如下几个:app扫..登录pc版系统
比如微信web版,在手机端微信登录的前提下,扫..确认,自动登录网页版。这里的app可以分为两大类,一个是自有的app,一个是第三方的app。
自己的app自有认证体系,在登录前提下完成pc端的扫描登录。
第三方app扫描登录场景,比如使用手机端的微信APP扫描登录PC端系统,这种情况下,一般是利用微信的oauth体系,服务端完成自有账户体系与微信账号的绑定,然后实现PC端的自动登录app扫..作为双因素验证
比如微信公众号..,在账户密码登录PC端的情况下,再使用手机端微信登录的前提下,扫描..再次确认,登录网页版Secure QR Login (SQRL)
完全使用..登录,替代用户密码。这个有SQRL协议及相关实现。
步骤
以下所有的都基于这个前提,就是手机app已经登录,自带有登录的凭证,然后要扫描登录pc端的系统打开pc端显示登录..(pc端未登录的前提下)
这个时候请求服务端生成一个登陆..
服务端生成..,该..包含了这个pc端的唯一标识,比如sessionId,或者是新生成一个uuid跟这个sessionId关联pc端同时开启轮询(有长连接等其他实现,这里以轮询方式介绍)
获取..之后,pc端开启定时轮询,轮询..的状态,主要有如下状态:NEW,SCANED,CONFIRMED,REFUSED,EXPIRED手机端扫描..
手机端已经登录的情况下,扫描网页..,..状态变为已扫描,然后手机端跳转到确认页面手机端确认
手机端扫描..之后,点击确认,..状态变为确认pc端跳转成功/..过期/拒绝
..状态变为确认之后,跳转自动登录,完成PC端登录态建立
如果app端拒绝这次请求,则..状态变为被拒绝,不再轮询
如果..状态在一定时间没有变化,则显示..过期,不再轮询
PC客户端请求登录..轮询..状态跳到到登陆后的页面