掃描二維碼登入實現原理分析
阿新 • • 發佈:2019-01-02
記得比較早使用手機掃碼登入是網頁版微信,這種免去輸入繁瑣的賬號密碼,拿起手機掃一掃就可以登入的方式一開始還是比較驚豔的。
那它是如何實現的呢?我們來簡單研究下。(以淘寶網二維碼登入為例)
首先,任何一個二維碼錶示的都是一串字串。
通過草料二維碼解析出這張二維碼錶示的是如下字串: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
如果沒有掃碼,返回的是:
{
"code": "10000",
"message": "login start state",
"success": true
}
如果掃了碼,但是手機上沒點選“確認登入”的話,介面顯示的是:
輪詢介面返回的是:
{
"code": "10001",
"message": "mobile scan QRCode success",
"success": true
}
如果長時間未掃碼,網頁端會停止輪詢,並顯示:
當手機端確認登入後,介面返回的是:
{
"code ": "10006",
"success": true,
"url": "https://login.taobao.com/member/loginByIm.do?uid=cntaobaoxxx&token=ff82fc0d1d395a33d3b38ec5a4981336&time=1530179143250&asker=qrcodelogin&ask_version=1.0.0&defaulturl=https://www.taobao.com&webpas=0b7aed2d43f01825183e4a49c6cae47d1479929926"
}
這裡返回了一個token,應該就是登入態。
這其中手機端與服務端做了什麼互動我們不得而知,但是可以猜測到,客戶端在登入態有效的情況下,拿網頁端的lgToken去請求了服端,並且服務端記住了這個lgToken,並認為登入了。當網頁端再次輪詢請求介面時,就返回真正的登入態Token。
最後以一張流程圖總結掃碼登入原理: