誰說管理后臺就要用繁瑣的帳號密碼登錄的?
寫代碼寫了五年鞋囊,寫管理后臺更是家常便飯。然后寫多了之后瞎惫,一是覺得常規(guī)的太沒有味道了溜腐。第一步,輸入帳號密碼瓜喇,第二步校驗帳號密碼是否正確挺益。最多就加上驗證碼,防止惡意登錄乘寒。
但是望众,最近發(fā)現(xiàn)越來越多網(wǎng)站都支持APP掃碼登錄了,那么我寫的管理后臺也可以采用高大上(簡單粗暴)的掃碼登錄嘛伞辛。但是烂翰,我沒理由去開發(fā)一個APP吧(其實我不會app開發(fā))。這個時候蚤氏,撿一個現(xiàn)成的app就好了嘛甘耿。但是現(xiàn)成app要開發(fā)帳號信息才行呀,符合這個要求的一個app就是微信竿滨。微信服務(wù)號提供oauth支持棵里,可以根據(jù)openid唯一識別用戶。
先放三張帥氣的圖片體現(xiàn)一下這種方法的優(yōu)雅:
別掃這個二維碼姐呐,因為地址是本地的,線上地址怎么可以放出來呢典蝌?
看起來還是挺順眼和方便的對吧曙砂,【容我自傲一下,畢竟我是后臺和運維出身】
如果沒有權(quán)限的微信掃碼是不讓他登錄的骏掀,多么完美鸠澈!
掃碼登錄原理
上面寫了這么多門面話,我們現(xiàn)在進入正題截驮,我們用一個圖來看一下掃碼登錄的背后架構(gòu)笑陈。
首先,這圖好像有點亂葵袭,我們細細分析一下(看的時候我們可以分開兩部分看涵妥,管理后臺和手機端兩個部分)。
首先坡锡,我們每一次打開管理后臺都拿到一個token(隨機字符串)蓬网。這個隨機字符串的作用是用于識別用戶的窒所,因為我們用手機在走登錄流程,服務(wù)器要判斷手機和在登錄管理后臺的電腦就需要一個標(biāo)識物來關(guān)聯(lián)帆锋。
管理后臺的二維碼其實是一個地址吵取,這個地址有一個get參數(shù),就是記錄著token锯厢。當(dāng)我們用微信掃碼跳轉(zhuǎn)到一個頁面皮官,我們就可以拿到token的內(nèi)容。然后实辑,微信向系統(tǒng)提交登錄的相關(guān)信息和這個token值捺氢,系統(tǒng)就知道這個token的用戶是一個管理員。
但是徙菠,掃碼允許登錄之后讯沈,pc那邊這么知道呢?這就需要pc端不停的拿token去詢問服務(wù)器了婿奔,直到服務(wù)器告知這個token是管理員之后再做后續(xù)操作(不停詢問的方法有很多缺狠,常見的有ajax不停輪詢和websocket)。
微信oauth登錄原理
微信oauth登錄過程:
引導(dǎo)用戶跳轉(zhuǎn)到微信服務(wù)器萍摊,并且?guī)弦粋€編碼后的地址A
用戶在微信服務(wù)器挤茄,點擊同意授權(quán)(或者無感知的登錄),就會跳轉(zhuǎn)到地址A冰木,并且?guī)蠀?shù)code
我們需要在地址A拿到code參數(shù)穷劈,然后加上微信服務(wù)號的appid和appkey等參數(shù),請求微信服務(wù)器踊沸,然后就得到了用戶openid和一個token
用戶openid已經(jīng)是唯一標(biāo)識符了歇终,如果我們還需要用戶其它信息,就需要用token和openid再一次請求微信服務(wù)器逼龟,從而獲取所需信息评凝。
一些要注意的事情
掃碼登錄是很方便,但是我們要注意腺律,既然是放在互聯(lián)網(wǎng)上的服務(wù)奕短,就必須小心防范各種攻擊。
token需要一個短的有效期匀钧,看看微信網(wǎng)頁版就會一段時間自動刷新二維碼翎碑。畢竟這個token關(guān)系到登錄安全,需謹慎之斯。
掃碼登錄必須要用戶確認日杈,不然如果欺騙用戶掃描了一個二維碼就登錄到管理后臺了。
掃碼登錄的防止惡意登錄的大部分工作都放在了移動端,所以用于掃碼的設(shè)備和應(yīng)用的安全性需要有所保障达椰。我們往往可以用微信等提供oauth服務(wù)的app來掃碼處理翰蠢。
喜歡我的文章,就點個贊點個關(guān)注咧啰劲,寫文章不易梁沧,特別對于一個寫代碼做架構(gòu)卻不重文筆的程序猴子。