以淘宝的扫码登录为例
手动刷新二维码地址
https://qrlogin.taobao.com/qrcodelogin/generateQRCode4Login.do?adUrl=&adImage=&adText=&viewFd4PC=&viewFd4Mobile=&from=tbTop&appkey=00000000&umid_token=T391152055F267C6EDCCB18EC75662246048A5880408CC936A697798A0E&ksTS=1586168700229_3926&callback=jsonp3927
返回信息
(function(){jsonp3927({“adToken”:“2e3613938a291620d4472f29a2ec89f6”,“success”:true,“lgToken”:“f8016a4440f2c6b3ebce098fea847cd1”,“message”:"",“url”:"//img.alicdn.com/imgextra/O1CN01frgVYg2EClvdsyqVC!!8709-2-xcode.png"});})();
二维码信息
https://login.m.taobao.com/qrcodeCheck.htm?lgToken=f8016a4440f2c6b3ebce098fea847cd1&tbScanOpenType=Notification
轮询地址,间隔2秒,3分钟过期
https://qrlogin.taobao.com/qrcodelogin/qrcodeLoginCheck.do?lgToken=f8016a4440f2c6b3ebce098fea847cd1&defaulturl=https%3A%2F%2Fwww.taobao.com%2F&_ksTS=1586168852637_5017&callback=jsonp5018
返回信息
(function(){jsonp5018({“message”:“login start state”,“success”:true,“code”:“10000”});})();
调用流程
1、用户打开登录页面,客户端生成一个随机串umid_token,向服务器获取二维码地址。
2、服务端生成lgToken,并作为key写入redis,过期时间为3分钟,value设置为umid_token;然后将lgToken拼接到登录地址的参数,返回给客户端。
3、客户端根据地址生成二维码展示,并携带lgToken轮询接口,查看用户是否扫描了此二维码,是否授权登录了。如果lgToken已过期,客户端就提示用户点击刷新二维码,并停止轮询,注意这个过期时间是必须要设置的,否则服务端将多出很多无用的请求。
4、手机扫描二维码,授权信息并登录,服务端生成用户的token,并且将token写入lgToken,客户端轮训得到token后,服务端就可以将lgToken删掉,防止二维码被泄露,同时客户端调用用户信息接口得到用户的详细信息。