新聞中心
在當(dāng)今的Web應(yīng)用開發(fā)過程中,基于JSON Web令牌(JWT)的認(rèn)證方案已經(jīng)被證明是使用非常廣泛的安全認(rèn)證方案。但是,JWT體系并不支持傳統(tǒng)客戶端-服務(wù)器架構(gòu)中的最終一致性:無論什么時(shí)候,如果要更新自定義令牌,所有客戶端都必須同時(shí)更新以確??捎眯浴?/p>

要解決這個(gè)問題,需要使用一些有記憶功能的持久存儲(chǔ),以安全地跟蹤JWT令牌正在使用的狀態(tài),并確??梢源_定正確更新狀態(tài)以及無效令牌的及時(shí)淘汰。
這里我們就用Redis作為這個(gè)有記憶功能的持久存儲(chǔ),搭建一個(gè)安全的JWT體系。Redis(REmote DIctionary Server)是一個(gè)高性能的,開源的內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),它提供了高度可擴(kuò)展性和卓越的性能?;氐轿覀兊腏WT體系,可以通過Redis實(shí)現(xiàn)邏輯簡(jiǎn)單而高性能的JWT認(rèn)證模式。
要構(gòu)建JWT認(rèn)證系統(tǒng),我們首先需要構(gòu)建基于Redis的令牌存儲(chǔ)模型。對(duì)于每個(gè)令牌,可以使用唯一的key來儲(chǔ)存它,并且為了確保命中的令牌是正確的,可以在儲(chǔ)存的key的value值中加入一個(gè)除了時(shí)間戳的令牌簽名信息,這樣就可以確認(rèn)令牌發(fā)布者的身份了。
下面我們就通過代碼來構(gòu)建一個(gè)基于Redis的JWT令牌系統(tǒng):
//generates a JWT token
function generateToken() {
//generate a random string
let token = Math.random().toString(36).substr(2)
//store token in Redis
let redisClient = new Redis({
host: 'localhost',
port: 6379
});
redisClient.set(token, Date.now().toString(), (err, reply) => {
console.log(reply.toString());
});
return token;
}
//validates a JWT Token
function validateToken(token) {
//query Redis for the token
let redisClient = new Redis({
host: 'localhost',
port: 6379
});
let timestamp = redisClient.get(token);
if (timestamp == null)
return false;
//check if token is valid
let now = Date.now();
if (Math.abs(now - timestamp)
return true;
return false;
}
由于Redis的特性,不管是存儲(chǔ)或是安全驗(yàn)證都可以很方便的實(shí)現(xiàn),Redis強(qiáng)大的高可用性也可以保證令牌安全狀態(tài)的可用性,所以如果要在當(dāng)今的Web應(yīng)用中構(gòu)建一個(gè)安全的JWT認(rèn)證系統(tǒng),Redis 是最好的選擇。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營(yíng)銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
網(wǎng)頁(yè)名稱:利用Redis集群構(gòu)建安全的JWT體系(redis集群jwt)
轉(zhuǎn)載注明:http://m.5511xx.com/article/cdppced.html


咨詢
建站咨詢
