2 回答

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
基于表單的身份驗(yàn)證
如果可以將會(huì)話狀態(tài)保留在服務(wù)器上,則可以進(jìn)行基于表單的身份驗(yàn)證。
以表單的形式發(fā)送憑據(jù),如果憑據(jù)有效,則服務(wù)器將發(fā)出cookie,該cookie將被來(lái)回發(fā)送以標(biāo)識(shí)服務(wù)器上的會(huì)話。要注銷,會(huì)話可以無(wú)效:
session.invalidate();
您還可以將應(yīng)用程序配置為由于超時(shí)而使會(huì)話過(guò)期:
<session-config> <session-timeout>60</session-timeout> <!-- minutes --> </session-config>
基于令牌的身份驗(yàn)證
如果您需要無(wú)狀態(tài)機(jī)制,請(qǐng)進(jìn)行基于令牌的身份驗(yàn)證。
客戶端將硬憑證(例如用戶名和密碼)交換為一條稱為令牌的數(shù)據(jù)。對(duì)于每個(gè)請(qǐng)求,客戶端將發(fā)送令牌到服務(wù)器以執(zhí)行身份驗(yàn)證,然后授權(quán),而不是發(fā)送硬憑證。
對(duì)于令牌,可以使用JSON Web令牌(JWT)。這是一個(gè)開(kāi)放標(biāo)準(zhǔn),它定義了一種緊湊且自成體系的方式,用于在各方之間作為JSON對(duì)象安全地傳輸信息。
JWT是以下標(biāo)記類型的通用名稱:
JSON Web簽名(JWS):對(duì)有效負(fù)載進(jìn)行編碼和簽名,以便可以驗(yàn)證聲明的完整性。
JSON Web加密(JWE):它們的有效負(fù)載已加密,因此對(duì)其他方隱藏了聲明。
令牌可以在exp
索賠中定義到期日期。要注銷,您可以從客戶端中刪除令牌。
您還可以在服務(wù)器端的白名單中跟蹤令牌,并根據(jù)需要使令牌無(wú)效。但是,無(wú)需將整個(gè)令牌存儲(chǔ)在服務(wù)器端:僅將令牌標(biāo)識(shí)符存儲(chǔ)在白名單中,并使用jti
聲明將令牌標(biāo)識(shí)符存儲(chǔ)在令牌中。

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
我建議您看看Apache Shiro,尤其是會(huì)話的管理方式(https://shiro.apache.org/session-management.html)。他們已經(jīng)抽象化了會(huì)話的概念,以便它可以在各種情況下工作:在Web應(yīng)用程序中(在這種情況下,它只是HTTP會(huì)話的包裝),在獨(dú)立應(yīng)用程序中,等等。前端可以打開(kāi)和關(guān)閉與后端層共享的Shiro會(huì)話(從中注銷)。
看到這句話:
異構(gòu)客戶端訪問(wèn)
(...) For example, a (desktop) application could ‘see’ and ‘share’ the same physical session. We are unaware of any framework other than Shiro that can support this
添加回答
舉報(bào)