jwt如何解決刷新token Jwt的token如何像session一樣去延長(zhǎng)時(shí)間?
Jwt的token如何像session一樣去延長(zhǎng)時(shí)間?隨著技術(shù)的發(fā)展和分布式web應(yīng)用的普及,通過(guò)會(huì)話管理用戶登錄狀態(tài)的成本越來(lái)越高。因此,它逐漸發(fā)展成為一種令牌方式來(lái)進(jìn)行登錄身份驗(yàn)證,然后利用令牌獲
Jwt的token如何像session一樣去延長(zhǎng)時(shí)間?
隨著技術(shù)的發(fā)展和分布式web應(yīng)用的普及,通過(guò)會(huì)話管理用戶登錄狀態(tài)的成本越來(lái)越高。因此,它逐漸發(fā)展成為一種令牌方式來(lái)進(jìn)行登錄身份驗(yàn)證,然后利用令牌獲取緩存在redis中的用戶信息。隨著JWT的出現(xiàn),驗(yàn)證方法更加簡(jiǎn)單方便。它不使用redis緩存,而是直接基于令牌取出保存的用戶信息,驗(yàn)證令牌的可用性,使單點(diǎn)登錄更容易。
JWT通常包含兩個(gè)令牌:訪問(wèn)令牌和刷新令牌。當(dāng)用戶通過(guò)登錄等方式成功驗(yàn)證身份時(shí),服務(wù)器會(huì)生成一個(gè)訪問(wèn)令牌和一個(gè)刷新令牌,并返回前端存儲(chǔ)。兩個(gè)令牌的過(guò)期時(shí)間都將在服務(wù)器上設(shè)置,但訪問(wèn)令牌的過(guò)期時(shí)間較短,而刷新令牌的過(guò)期時(shí)間較長(zhǎng)。當(dāng)當(dāng)前端向服務(wù)器發(fā)送請(qǐng)求時(shí),訪問(wèn)令牌將與請(qǐng)求一起發(fā)送到服務(wù)器,以驗(yàn)證請(qǐng)求者的身份。當(dāng)服務(wù)器發(fā)現(xiàn)訪問(wèn)令牌已過(guò)期時(shí),它將返回失敗信息。此時(shí),前端需要使用refresh token從服務(wù)器申請(qǐng)新的訪問(wèn)令牌。如果刷新令牌沒(méi)有問(wèn)題,服務(wù)器將生成一個(gè)新的訪問(wèn)令牌。如果刷新令牌已過(guò)期,則需要要求用戶再次登錄以驗(yàn)證其身份。
總之,JWT擴(kuò)展是通過(guò)使用過(guò)期時(shí)間較長(zhǎng)的刷新令牌重新申請(qǐng)新的訪問(wèn)令牌來(lái)實(shí)現(xiàn)的。當(dāng)刷新令牌也已過(guò)期時(shí),不可能延長(zhǎng)時(shí)間。
token和session區(qū)別?
注銷是指客戶端的主動(dòng)注銷。很容易想到一個(gè)解決方案:在客戶機(jī)成功登錄之后,服務(wù)器將sessionid分配給它,客戶機(jī)每次請(qǐng)求資源時(shí)都會(huì)帶上sessionid。
服務(wù)器決定用戶是否登錄,這完全取決于sessionid。一旦被截獲,黑客就可以模擬用戶的請(qǐng)求。因此我們需要引入Token的概念:用戶成功登錄后,服務(wù)器不僅要分配sessionid,還要分配Token,Token是維護(hù)登錄狀態(tài)的關(guān)鍵秘密數(shù)據(jù)。從服務(wù)器發(fā)送到客戶端的令牌數(shù)據(jù)也需要加密。因此,登錄的詳細(xì)信息將再次展開。
客戶端首次向服務(wù)器發(fā)起登錄請(qǐng)求(不傳輸用戶名和密碼)。
服務(wù)器使用RSA算法生成一對(duì)公鑰和私鑰。保留私鑰,并將公鑰發(fā)送給客戶端。
客戶端收到公鑰后,對(duì)用戶密碼進(jìn)行加密,并將用戶名和加密后的用戶密碼發(fā)送給服務(wù)器,同時(shí)生成一對(duì)公鑰和私鑰,保留私鑰并將公鑰發(fā)送給服務(wù)器,第二次登錄請(qǐng)求發(fā)送用戶名,客戶端生成的加密密碼和公鑰。
服務(wù)器使用保留的私鑰解密密文并獲取真實(shí)密碼。判斷用戶可以登錄后,生成sessionid和token,并使用客戶端發(fā)送的公鑰對(duì)token進(jìn)行加密。最后,會(huì)話ID和加密令牌返回給客戶機(jī)。
客戶端使用自己生成的私鑰來(lái)解密令牌密文并獲得真正的令牌。
oauth2與jwt的區(qū)別?
Oauth2有客戶機(jī)和范圍的概念,但JWT沒(méi)有。如果它只用于頒發(fā)令牌,則兩者之間沒(méi)有區(qū)別。常用的熊算法OAuth,JWT都可以用。應(yīng)用場(chǎng)景不同