1. 程式人生 > >掃描二維碼登入實現原理分析

掃描二維碼登入實現原理分析

記得比較早使用手機掃碼登入是網頁版微信,這種免去輸入繁瑣的賬號密碼,拿起手機掃一掃就可以登入的方式一開始還是比較驚豔的。

那它是如何實現的呢?我們來簡單研究下。(以淘寶網二維碼登入為例)

首先,任何一個二維碼錶示的都是一串字串。

通過草料二維碼解析出這張二維碼錶示的是如下字串: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去請求服務。

如果沒有掃碼,返回的是:

{
    "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。

最後以一張流程圖總結掃碼登入原理:
這裡寫圖片描述