網(wǎng)站內容更新機制(Token+Redis怎么做登錄認證?服務(wù)共享session)
優(yōu)采云 發(fā)布時(shí)間: 2022-04-09 17:05網(wǎng)站內容更新機制(Token+Redis怎么做登錄認證?服務(wù)共享session)
在單臺服務(wù)器中,我們大部分的用戶(hù)認證都是會(huì )話(huà)(session),但是如果是集群服務(wù)器架構呢?需要做會(huì )話(huà)共享,多個(gè)服務(wù)共享一個(gè)會(huì )話(huà),這樣才能保證集群服務(wù)器架構(多臺服務(wù)器)使用一個(gè)會(huì )話(huà),或者我們也可以使用Token進(jìn)行登錄認證,使用Token+Redis同時(shí)實(shí)現一起完整的登錄身份驗證。
會(huì )話(huà)共享將在后面討論。今天我們就來(lái)說(shuō)說(shuō)Token+Redis是如何進(jìn)行登錄認證的。
首先我簡(jiǎn)單介紹一下什么是JWT。 JWT的全稱(chēng)是(JSON WEB TOKEN),是目前流行的登錄認證工具之一。這是一個(gè)非常輕量級的規范。該規范允許我們使用 JWT 在用戶(hù)和服務(wù)器之間傳遞安全可靠的信息。它的兩個(gè)主要使用場(chǎng)景是身份驗證和數據交換。
詳細的JWT這里就不解釋了,留到下一篇吧。今天要講的就是JWT認證,也就是使用JWT生成Token,客戶(hù)端使用Token來(lái)訪(fǎng)問(wèn)我們其他需要用戶(hù)認證的接口。
事實(shí)上,JWT 生成的是一個(gè)字符串。 JWT 生成的 Token 由三部分組成:Header、Payload 和 Signature。具體情況大家自己了解,這里不再贅述。今天我們主要講一下Token的更新策略。
我們生成Token的場(chǎng)景是在用戶(hù)登錄成功的時(shí)候生成的。如果用戶(hù)每次登錄都要生成一個(gè)Token,在高并發(fā)場(chǎng)景下是很糟糕的,也很容易被惡意攻擊??梢允褂?store 的緩存方案來(lái)做 Token 更新策略。
JWT 生成的 Token 具有有效性機制。如果設置為 30 分鐘,則 Token 為 30 分鐘。如果用戶(hù)在我們的WEB網(wǎng)站上一直活躍30分鐘,那么在第31分鐘你必須重新登錄,這給用戶(hù)的體驗極差,和我們使用的Session有效性機制不同單服務(wù)器。
本地緩存我們可以使用市場(chǎng)上最流行的內存數據庫Redis系統。使用Redis做Token更新策略的主要流程,可以先看下圖。
這張圖的主要思路是:用戶(hù)帶上賬號和密碼訪(fǎng)問(wèn)后端驗證,驗證成功后生成一個(gè)Token,并為T(mén)oken設置有效期, Token 被放入 Redis。 Redis 中的有效期必須比 Token 的有效期長(cháng)。用戶(hù)訪(fǎng)問(wèn)界面時(shí),如果token已經(jīng)過(guò)期,去redis查找。如果redis有token,就會(huì )生成一個(gè)新的token來(lái)替換過(guò)期的token。 redis的有效期重置為60分鐘。如果redis中不存在token,說(shuō)明token在redis中已經(jīng)過(guò)期或者是無(wú)效token,提示用戶(hù)重新登錄。



