在單臺服務(wù)器中啡浊,我們的用戶認證大部分采取的是session(會話),但如果是一個集群的服務(wù)器架構(gòu)呢蔚约?就得要做session共享涂籽,多個服務(wù)共享一個session评雌,這樣就可以確保集群服務(wù)器架構(gòu)(多臺服務(wù)器)使用一個session,或者我們還可以使用Token來做登錄認證砂轻,使用Token+Redis這兩者一起實現(xiàn)一個完整的登錄認證斤吐。
Session共享咱們以后再講厨喂,今天我們來說說Token+Redis怎么做登錄認證。
先給大家簡單的介紹什么是JWT庄呈,JWT全稱為(JSON WEB TOKEN)蜕煌,是目前流行做登錄認證的工具之一,它是一個非常輕巧的規(guī)范诬留。這個規(guī)范允許我們使用JWT在用戶和服務(wù)器之前傳遞安全可靠的信息斜纪。它的兩大使用場景就是做認證和數(shù)據(jù)交換。
詳細的JWT我在這不做詳解文兑,留在下一篇盒刚。今天要說的是JWT的認證,也就是使用JWT來生成Token绿贞,并且客戶端使用Token來訪問我們其他需要用戶認證的接口因块。
其實JWT生成的就是一段字符串,JWT生成的Token由三部分組成:Header籍铁,Payload,Signature寨辩。詳細的情況自行去了解,在這不做闡述歼冰。今天咱們主要是講Token的更新策略靡狞。
咱們生成Token的場景是在用戶登陸成功時生成的,如果用戶每次登陸時都要生成一個Token隔嫡,那么在高并發(fā)場景下是十分不好的甸怕,而且也容易被人惡意攻擊,咱們就可以使用本店緩存方案來做Token更新策略腮恩。
JWT生成的Token是有一個有效期機制的梢杭,設(shè)置了30分鐘那么這個Token就是30分鐘,如果用戶這30分鐘總是在活躍在我們的WEB網(wǎng)站上秸滴,那么在第31分鐘就得要去重新登錄一次武契,這樣給用戶的體驗是極差的,而且跟咱們單臺服務(wù)器使用的Session有效期機制也是不一樣的荡含。
本地緩存咱們可以采取Redis系統(tǒng)咒唆,現(xiàn)在市面上最流行的內(nèi)存數(shù)據(jù)庫。使用Redis來做Token的更新策略主要流程释液,可以先看看以下的圖全释。
這張圖的主要思路就是:用戶攜帶賬號密碼訪問后端校驗,校驗成功后生成Token误债,并且給Token設(shè)置有效期浸船,并且把Token放入至Redis中妄迁,redis中的有效期一定要比Token的有效期大。當用戶訪問接口時李命,如果token已經(jīng)失效了登淘,則去redis中查找,redis有該token則生成一個新的token项戴,替換掉已經(jīng)失效的token形帮,redis的有效期時間則重新設(shè)置為60分鐘。如果redis中沒有該token周叮,說明該token已經(jīng)在redis失效或者是無效token辩撑,則告知用戶重新登錄。
覺得寫得好的可以關(guān)注微信公眾號:請快點喜歡我