最近不少网站均可以扫码登陆了(我看的阿里云)。这里我想了下大概流程,并观察了阿里云登陆页面的network,发表下对扫码登陆的实现。也许有漏洞,欢迎指教。redis
流程:缓存
一、网页端点击扫码登陆,并向服务器端发出要扫码登陆的请求。安全
二、服务器端生成一个惟一的token,并储存(这里好比储存在了redis, jedis.set("token",""),token为生成的那个),并返回。服务器
三、网页端获取到token后,把token做为参数,拼接url,并生成二维码(好比qrcode生成)。学习
四、手机端扫码,并加上手机登陆的本地信息(好比user_id,持久ticket)。网站
注:这一步能够进行加密,请求传user_id,token 和用user_id,token,ticket拼接加密的md5。阿里云
五、服务器端收到请求后,验证签名;成功后,更新储存(jedis.set("token","user_id"),token是前面的,user_id是传过来的)。加密
六、网页端轮询请求验证token是否有具体user_id(其实这一步,是在生成二维码时候就开始了),若是有,则获取user_id 并进行跳转,完成登陆(这一步清楚redis缓存噢)。url
优势:省事(不用各类输),安全(全程不涉及密码)。code
后语:如今并无写出实际代码,只是今天没什么事情,要加班,才想一想怎么实现,也许有漏洞,也许方式很差,欢迎指教,毕竟不是高手,要谦虚学习。固然,若是能帮到你们,我也很开心的。