首先,任何一個二維碼表示的都是一串字符串。
我們打開淘寶登錄頁面:https://login.taobao.com/member/login.jhtml,展示了二維碼:
image.png
通過草料二維碼解析出這張二維碼表示的是如下字符串:
https://login.m.taobao.com/qrcodeCheck.htm?lgToken=e20115f0e33f373f6be958ca54a60b56&tbScanOpenType=Notification,
這關鍵的就是lgToken,這是網頁的一個唯一ID。
當打開了二維碼登錄后,我們通過chrome控制台看網路請求,會發現:
網頁在輪詢調用接口:https://qrlogin.taobao.com/qrcodelogin/qrcodeLoginCheck.do?lgToken=9ed6cfefe97b10b808fbfff0705379b1&defaulturl=&_ksTS=1530178881213_61&callback=jsonp62,
即拿上面二維碼里的lgToken去請求服務。
如果沒有掃碼,返回的是:
image.png
如果掃了碼,但是手機上沒點擊“確認登錄”的話,界面顯示的是:
image.png
輪詢接口返回的是:
image.png
如果長時間未掃碼,網頁端會停止輪詢,並顯示:
image.png
當手機端確認登錄后,接口返回的是:
image.png
這里返回了一個token,應該就是登錄態。
這其中手機端與服務端做了什么交互我們不得而知,但是可以猜測到,客戶端在登錄態有效的情況下,拿網頁端的lgToken去請求了服端,並且服務端記住了這個lgToken,並認為登錄了。當網頁端再次輪詢請求接口時,就返回真正的登錄態Token。
最后以一張流程圖總結掃碼登錄原理:
image.png
————————————————
版權聲明:本文為CSDN博主「360linker」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/belalds/article/details/83818707