深入了解Token

摘要: Token 是在服務(wù)端產(chǎn)生的华嘹。如果前端使用用戶名/密碼向服務(wù)端請(qǐng)求認(rèn)證,服務(wù)端認(rèn)證成功耙厚,那么在服務(wù)端會(huì)返回 Token 給前端。前端可以在每次請(qǐng)求的時(shí)候帶上 Token 證明自己的合法地位俯渤。

為什么要用 Token型宝?

因?yàn)樗芙鉀Q問(wèn)題!

可以解決哪些問(wèn)題呢诡曙?

Token 完全由應(yīng)用管理价卤,所以它可以避開(kāi)同源策略

Token 可以避免 CSRF 攻擊(http://dwz.cn/7joLzx)

Token 可以是無(wú)狀態(tài)的劝萤,可以在多個(gè)服務(wù)間共享

Token 是在服務(wù)端產(chǎn)生的慎璧。如果前端使用用戶名/密碼向服務(wù)端請(qǐng)求認(rèn)證,服務(wù)端認(rèn)證成功厌处,那么在服務(wù)端會(huì)返回 Token 給前端岁疼。前端可以在每次請(qǐng)求的時(shí)候帶上 Token 證明自己的合法地位。如果這個(gè) Token 在服務(wù)端持久化(比如存入數(shù)據(jù)庫(kù))瑰排,那它就是一個(gè)永久的身份令牌暖侨。

需要設(shè)置有效期嗎?

對(duì)于這個(gè)問(wèn)題字逗,我們不妨先看兩個(gè)例子宅广。一個(gè)例子是登錄密碼些举,一般要求定期改變密碼,以防止泄漏兽肤,所以密碼是有有效期的绪抛;另一個(gè)例子是安全證書(shū)电禀。SSL 安全證書(shū)都有有效期幢码,目的是為了解決吊銷(xiāo)的問(wèn)題尖飞,對(duì)于這個(gè)問(wèn)題的詳細(xì)情況政基,來(lái)看看知乎的回答(http://dwz.cn/7joMhq)。所以無(wú)論是從安全的角度考慮沮明,還是從吊銷(xiāo)的角度考慮,Token 都需要設(shè)有效期酱畅。

那么有效期多長(zhǎng)合適呢江场?

只能說(shuō),根據(jù)系統(tǒng)的安全需要址否,盡可能的短,但也不能短得離譜——想像一下手機(jī)的自動(dòng)熄屏?xí)r間樊诺,如果設(shè)置為 10 秒鐘無(wú)操作自動(dòng)熄屏帮匾,再次點(diǎn)亮需要輸入密碼,會(huì)不會(huì)瘋瘟斜?如果你覺(jué)得不會(huì)缸夹,那就親自試一試痪寻,設(shè)置成可以設(shè)置的最短時(shí)間,堅(jiān)持一周就好(不排除有人適應(yīng)這個(gè)時(shí)間虽惭,畢竟手機(jī)廠商也是有用戶體驗(yàn)研究的)橡类。

然后新問(wèn)題產(chǎn)生了,如果用戶在正常操作的過(guò)程中芽唇,Token 過(guò)期失效了顾画,要求用戶重新登錄……用戶體驗(yàn)豈不是很糟糕?

為了解決在操作過(guò)程不能讓用戶感到 Token 失效這個(gè)問(wèn)題匆笤,有一種方案是在服務(wù)器端保存 Token 狀態(tài)研侣,用戶每次操作都會(huì)自動(dòng)刷新(推遲) Token 的過(guò)期時(shí)間——Session 就是采用這種策略來(lái)保持用戶登錄狀態(tài)的。然而仍然存在這樣一個(gè)問(wèn)題炮捧,在前后端分離庶诡、單頁(yè) App 這些情況下咆课,每秒種可能發(fā)起很多次請(qǐng)求末誓,每次都去刷新過(guò)期時(shí)間會(huì)產(chǎn)生非常大的代價(jià)。如果 Token 的過(guò)期時(shí)間被持久化到數(shù)據(jù)庫(kù)或文件书蚪,代價(jià)就更大了喇澡。所以通常為了提升效率,減少消耗殊校,會(huì)把 Token 的過(guò)期時(shí)保存在緩存或者內(nèi)存中晴玖。

還有另一種方案,使用 Refresh Token箩艺,它可以避免頻繁的讀寫(xiě)操作窜醉。這種方案中,服務(wù)端不需要刷新 Token 的過(guò)期時(shí)間艺谆,一旦 Token 過(guò)期榨惰,就反饋給前端,前端使用 Refresh Token 申請(qǐng)一個(gè)全新 Token 繼續(xù)使用静汤。這種方案中琅催,服務(wù)端只需要在客戶端請(qǐng)求更新 Token 的時(shí)候?qū)?Refresh Token 的有效性進(jìn)行一次檢查,大大減少了更新有效期的操作虫给,也就避免了頻繁讀寫(xiě)藤抡。當(dāng)然 Refresh Token 也是有有效期的,但是這個(gè)有效期就可以長(zhǎng)一點(diǎn)了抹估,比如缠黍,以天為單位的時(shí)間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末药蜻,一起剝皮案震驚了整個(gè)濱河市瓷式,隨后出現(xiàn)的幾起案子替饿,更是在濱河造成了極大的恐慌,老刑警劉巖贸典,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件视卢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡廊驼,警方通過(guò)查閱死者的電腦和手機(jī)据过,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妒挎,“玉大人绳锅,你說(shuō)我怎么就攤上這事〖⒙” “怎么了榨呆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)庸队。 經(jīng)常有香客問(wèn)我,道長(zhǎng)闯割,這世上最難降的妖魔是什么彻消? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宙拉,結(jié)果婚禮上宾尚,老公的妹妹穿的比我還像新娘。我一直安慰自己谢澈,他們只是感情好煌贴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著锥忿,像睡著了一般牛郑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敬鬓,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天淹朋,我揣著相機(jī)與錄音,去河邊找鬼钉答。 笑死础芍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的数尿。 我是一名探鬼主播仑性,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼右蹦!你這毒婦竟也來(lái)了诊杆?” 一聲冷哼從身側(cè)響起歼捐,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刽辙,沒(méi)想到半個(gè)月后窥岩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宰缤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年颂翼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慨灭。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朦乏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氧骤,到底是詐尸還是另有隱情呻疹,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布筹陵,位于F島的核電站刽锤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏朦佩。R本人自食惡果不足惜并思,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望语稠。 院中可真熱鬧宋彼,春花似錦、人聲如沸仙畦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)慨畸。三九已至莱坎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間先口,已是汗流浹背型奥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碉京,地道東北人厢汹。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谐宙,于是被迫代替她去往敵國(guó)和親烫葬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354