認識了二維碼,我們了解一下移動互聯網下的傳統登錄認證機制。
前面我們說過,為了安全,手機端它是不會存儲你的登錄密碼的。 但是在日常使用過程中,我們應該會注意到,只有在你的應用下載下來后,第一次登錄的時候,才需要進行一個賬號密碼的登錄, 那之后呢 即使這個應用進程被殺掉,或者手機重啟,都是不需要再次輸入賬號密碼的,它可以自動登錄。
其實這背后就是一套基于token的認證機制,我們來看一下這套機制是怎么運行的。
如上圖所示:
- 1)賬號密碼登錄時,客戶端會將設備信息一起傳遞給服務端;
- 2)如果賬號密碼校驗通過,服務端會把賬號與設備進行一個綁定,存在一個數據結構中,這個數據結構中包含了賬號ID、設備ID、設備類型等等。
const token = {
acountid: '賬號ID',
deviceid: '登錄的設備ID',
deviceType: '設備類型,如 iso,android,pc......',
}
然后服務端會生成一個token,用它來映射數據結構,這個token其實就是一串有著特殊意義的字符串,它的意義就在于,通過它可以找到對應的賬號與設備信息。
具體是:
- 1)客戶端得到這個token后,需要進行一個本地保存,每次訪問系統API都攜帶上token與設備信息;
- 2)服務端就可以通過token找到與它綁定的賬號與設備信息,然后把綁定的設備信息與客戶端每次傳來的設備信息進行比較, 如果相同,那么校驗通過,返回AP接口響應數據, 如果不同,那就是校驗不通過拒絕訪問。
從前面這個流程,我們可以看到,客戶端不會也沒必要保存你的密碼,相反,它是保存了token。
可能有些同學會想,這個token這么重要,萬一被別人知道了怎么辦。
實際上:知道了也沒有影響, 因為設備信息是唯一的,只要你的設備信息別人不知道, 別人拿其他設備來訪問,驗證也是不通過的。
可以說,客戶端登錄的目的,就是獲得屬于自己的token。
限于篇幅,這方面的文章,可以詳細讀一下以下幾篇:
《IM開發基礎知識補課(一):正確理解前置HTTP SSO單點登陸接口的原理》
《IM開發基礎知識補課(四):正確理解HTTP短連接中的Cookie、Session和Token》
《IM開發基礎知識補課(七):主流移動端賬號登錄方式的原理及設計思路》(推薦)
那么在掃碼登錄過程中,PC端是怎么獲得屬于自己的token呢?不可能手機端直接把自己的token給PC端用!token只能屬于某個客戶端私有,其他人或者是其他客戶端是用不了的。
在分析這個問題之前,我們有必要先梳理一下,掃描二維碼登錄的一般步驟是什么樣的。這可以幫助我們梳理清楚整個過程。