java实现手机扫码登录客户端
為什么手機(jī)登錄記住密碼后不用再次登錄
? ? ? ?在了解掃碼登錄之前我們先了解一下其他內(nèi)容,?首先為了安全,手機(jī)端它是不會(huì)存儲(chǔ)你的登錄密碼的。但是在日常使用過(guò)程中,我們應(yīng)該會(huì)注意到,只有在你的應(yīng)用下載下來(lái)后,第一次登錄的時(shí)候,才需要進(jìn)行一個(gè)賬號(hào)密碼的登錄, 那之后呢 即使這個(gè)應(yīng)用進(jìn)程被殺掉,或者手機(jī)重啟,都是不需要再次輸入賬號(hào)密碼的,它可以自動(dòng)登錄。
其實(shí)這背后就是一套基于token的認(rèn)證機(jī)制,我們來(lái)看一下這套機(jī)制是怎么運(yùn)行的,
?
1、賬號(hào)密碼登錄時(shí),客戶端會(huì)將設(shè)備信息一起傳遞給服務(wù)端
2、如果賬號(hào)密碼校驗(yàn)通過(guò),服務(wù)端會(huì)把賬號(hào)與設(shè)備進(jìn)行一個(gè)綁定,存在一個(gè)數(shù)據(jù)結(jié)構(gòu)里
然后服務(wù)端會(huì)生成一個(gè)token,用它來(lái)映射數(shù)據(jù)結(jié)構(gòu),這個(gè)token其實(shí)就是一串有著特殊意義的字符串,它的意義就在于,通過(guò)它可以找到對(duì)應(yīng)的賬號(hào)與設(shè)備信息,
1、客戶端得到這個(gè)token后,需要進(jìn)行一個(gè)本地保存,每次訪問(wèn)系統(tǒng)API都攜帶上token與設(shè)備信息。
2、服務(wù)端就可以通過(guò)token找到與它綁定的賬號(hào)與設(shè)備信息,然后把綁定的設(shè)備信息與客戶端每次傳來(lái)的設(shè)備信息進(jìn)行比較, 如果相同,那么校驗(yàn)通過(guò),返回AP接口響應(yīng)數(shù)據(jù), 如果不同,那就是校驗(yàn)不通過(guò)拒絕訪問(wèn)
從前面這個(gè)流程,我們可以看到,客戶端不會(huì)也沒(méi)必要保存你的密碼,相反,它是保存了token。可能有些同學(xué)會(huì)想,這個(gè)token這么重要,萬(wàn)一被別人知道了怎么辦。實(shí)際上,知道了也沒(méi)有影響, 因?yàn)樵O(shè)備信息是唯一的,只要你的設(shè)備信息別人不知道, 別人拿其他設(shè)備來(lái)訪問(wèn),驗(yàn)證也是不通過(guò)的。
可以說(shuō),客戶端登錄的目的,就是獲得屬于自己的token。
那么在掃碼登錄過(guò)程中,PC端是怎么獲得屬于自己的token呢?不可能手機(jī)端直接把自己的token給PC端用!token只能屬于某個(gè)客戶端私有,其他人或者是其他客戶端是用不了的。
二維碼登錄本質(zhì)上也是一種登錄認(rèn)證方式。既然是登錄認(rèn)證,要做的也就兩件事情!
1、告訴系統(tǒng)我是誰(shuí)
2、向系統(tǒng)證明我是誰(shuí)
比如賬號(hào)密碼登錄,賬號(hào)就是告訴系統(tǒng)我是誰(shuí), 密碼就是向系統(tǒng)證明我是誰(shuí);比如手機(jī)驗(yàn)證碼登錄,手機(jī)號(hào)就是告訴系統(tǒng)我是誰(shuí),驗(yàn)證碼就是向系統(tǒng)證明我是誰(shuí)。
大致流程
1、手機(jī)登錄
掃描前,手機(jī)端應(yīng)該是已登錄狀態(tài)
手機(jī)輸入個(gè)人賬號(hào)密碼登錄后,服務(wù)器存著用戶的身份信息,然后服務(wù)器返回給手機(jī)端用戶的身份信息,登錄之后手機(jī)端相當(dāng)于拿到了身份的識(shí)別標(biāo)志
2、PC端二維碼的獲取
PC端向服務(wù)端發(fā)起請(qǐng)求,告訴服務(wù)端,我要生成用戶登錄的二維碼,把PC端設(shè)備信息也傳遞給服務(wù)端,因?yàn)槊颗_(tái)電腦都有這個(gè)網(wǎng)頁(yè),所以需要綁定一下PC端的設(shè)備信息
服務(wù)端收到請(qǐng)求后,它生成二維碼ID,并將二維碼ID與PC端設(shè)備信息進(jìn)行綁定(兩者組合就是個(gè)身份識(shí)別標(biāo)記),然后把二維碼ID與PC端設(shè)備綁定信息和用戶跳轉(zhuǎn)地址返回給PC端,PC端收到上面三者信息后,生成二維碼(二維碼中肯定包含了ID)
3、
為了及時(shí)知道二維碼的狀態(tài),客戶端在展現(xiàn)二維碼后,PC端的js定時(shí)器帶著二維碼ID和跳轉(zhuǎn)地址url不斷的發(fā)送ajax請(qǐng)求輪詢服務(wù)端,比如每隔一秒就輪詢一次,請(qǐng)求服務(wù)端告訴當(dāng)前二維碼的狀態(tài)及相關(guān)信息,查看是未登錄,還是正在登錄,還是已經(jīng)登陸,
4、手機(jī)掃碼
用戶用手機(jī)去掃描PC端的二維碼,通過(guò)二維碼內(nèi)容取到其中的二維碼ID與PC端設(shè)備綁定信息和跳轉(zhuǎn)地址url,
再調(diào)用服務(wù)端接口將手機(jī)端的身份信息與電腦端二維碼ID和跳轉(zhuǎn)的url一起發(fā)送給服務(wù)端,
服務(wù)端接收到后,它可以將身份信息與二維碼ID進(jìn)行綁定,生成臨時(shí)token,然后返回給手機(jī)端,也就是確認(rèn)登錄頁(yè)面
因?yàn)镻C端一直在輪詢二維碼狀態(tài),所以這時(shí)候二維碼狀態(tài)發(fā)生了改變,它就可以在界面上把二維碼狀態(tài)更新為已掃描
?5、狀態(tài)確認(rèn)
手機(jī)端在接收到臨時(shí)token后會(huì)彈出確認(rèn)登錄界面,用戶點(diǎn)擊確認(rèn)時(shí),手機(jī)端攜帶臨時(shí)token(用戶身份信息與二維碼ID綁定)用來(lái)調(diào)用服務(wù)端的接口,告訴服務(wù)端,我已經(jīng)確認(rèn)
服務(wù)端收到確認(rèn)后,根據(jù)二維碼ID綁定的設(shè)備信息與賬號(hào)信息,生成用戶PC端登錄的token
這時(shí)候PC端的輪詢接口,它就可以得知二維碼的狀態(tài)已經(jīng)變成了"已確認(rèn)",并且從服務(wù)端可以獲取到用戶登錄的token,并且去數(shù)據(jù)庫(kù)取用戶的信息
PC端輪詢接口,確認(rèn)已經(jīng)登錄,然后可以跳轉(zhuǎn)頁(yè)面同時(shí)顯示用戶信息
?
總結(jié)
以上是生活随笔為你收集整理的java实现手机扫码登录客户端的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 井字棋LeetCode简单题
- 下一篇: 搭建全民K歌TV运行环境