移動網(wǎng)頁APP保持用戶登錄的改進(jìn)方案(UUID Redis Token)

一 面臨問題

當(dāng)前移動app最常見的保持登錄的方案就是:持續(xù)刷新的JWT(json web token)方案雅任。
即用戶登錄后,客戶端獲得JWT花枫,此后不斷刷新或是過去后刷新黍瞧。
這個方案有兩個問題:
1,JWT 自身的問題椎例。
JWT 的安全的基石是保證秘鑰(secret key)的安全挨决,因為一旦秘鑰泄露,擁有秘鑰的人可以偽造所有用戶订歪。這給管理帶來了麻煩脖祈,我們還要完全信任管理人員,管理人員變動就要修改秘鑰刷晋,而修改秘鑰又會打斷用戶的登錄狀態(tài)盖高。也許有人會說,這不是問題眼虱,這個和數(shù)據(jù)庫賬號密碼管理一樣啊喻奥,這個還有些不同,生產(chǎn)環(huán)境的數(shù)據(jù)庫賬號密碼通常會有登錄IP限制捏悬。
2撞蚕,JWT 的刷新機制有問題。
為了安全过牙,很多人都知道token長期保持不變不安全甥厦,通常會采取刷新token的機制。當(dāng)是當(dāng)下寇钉,很多刷新機制是為了刷新而刷新刀疙,常見的刷新機制是:token到期后或是提前刷新,或者就是定時刷新扫倡。如果token被盜谦秧,黑客和合法用戶都可以通過刷新來獲取新的token,這并沒帶來實際的安全提升镊辕。

二 問題解答

1油够,針對JWT秘鑰管理問題
這里給出的方案就是不使用JWT, 采用一個類似session 的機制,使用一個隨機值(uuid)做token, 數(shù)據(jù)到后臺集中的redis存儲查詢征懈。暫且稱之為UUID Redis Token.
JWT的最大有點就是自身和存儲用戶數(shù)據(jù)石咬,不用到集中的存儲點查詢,便于分布式應(yīng)用卖哎,這個特點導(dǎo)致了已發(fā)布的JWT不易撤銷」碛疲現(xiàn)實中删性,很多使用JWT的公司并不是單純的在jwt里取用戶數(shù)據(jù),依舊在服務(wù)器取數(shù)據(jù)焕窝。還有蹬挺,對于像圖片,視頻等需要用戶登錄的檢查它掂,通常把token放到url 里巴帮,而JWT顯得數(shù)據(jù)過大。
使用redis在后端保存用戶信息有良好的擴展性虐秋,足夠應(yīng)滿足大型網(wǎng)站的需求榕茧。
講到這里,這個機制和傳統(tǒng)的session 機制是一樣的客给,uuid 相當(dāng)于session-id.
這個的uuid 并不要求按標(biāo)準(zhǔn)格式用押,只需不重復(fù)即可,對于PHP 很容易生成

$token = bin2hex(random_bytes(20));

2 UUID Redis Token的特點和刷新機制

  • 每個token有一個較長的有效期,比如90天靶剑,這個是為了滿足長期登錄的需求
  • 每個token有一個較短的刷新間隔蜻拨,比如2個小時。常常更換token 提升安全性
  • 每當(dāng)token刷新時桩引,創(chuàng)建新的token缎讼,同時修改舊的token的有效期,比如60秒后過期阐污,保證舊的token短暫可用休涤,(并發(fā)請求時咱圆,可能會用到舊token)
  • 每當(dāng)用戶重新登錄或是修改密碼笛辟,刪除token。
  • 利用redis或mysql 的鎖機制序苏,確保并發(fā)請求時只有個刷到新的token手幢。
    服務(wù)器token處理邏輯:通過token在redis里獲取用戶數(shù)據(jù),如果找不到則表示token失效或錯誤忱详,要求用戶再次登錄围来。如果找到用戶信息且token 是2個小時內(nèi)創(chuàng)建的,則不刷新token, 如果token創(chuàng)建時間超過2個小時前匈睁,則創(chuàng)建新的token給用戶监透,服務(wù)器復(fù)制用戶數(shù)據(jù)到新的token,同時修改舊token 60秒后過期航唆。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胀蛮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子糯钙,更是在濱河造成了極大的恐慌粪狼,老刑警劉巖退腥,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異再榄,居然都是意外死亡狡刘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門困鸥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗅蔬,“玉大人,你說我怎么就攤上這事疾就」撼牵” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵虐译,是天一觀的道長瘪板。 經(jīng)常有香客問我,道長漆诽,這世上最難降的妖魔是什么侮攀? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮厢拭,結(jié)果婚禮上兰英,老公的妹妹穿的比我還像新娘。我一直安慰自己供鸠,他們只是感情好畦贸,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著楞捂,像睡著了一般薄坏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寨闹,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天胶坠,我揣著相機與錄音,去河邊找鬼繁堡。 笑死沈善,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椭蹄。 我是一名探鬼主播闻牡,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绳矩!你這毒婦竟也來了罩润?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤埋酬,失蹤者是張志新(化名)和其女友劉穎哨啃,沒想到半個月后烧栋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡拳球,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年审姓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祝峻。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡魔吐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莱找,到底是詐尸還是另有隱情酬姆,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布奥溺,位于F島的核電站辞色,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浮定。R本人自食惡果不足惜相满,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桦卒。 院中可真熱鬧立美,春花似錦、人聲如沸方灾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裕偿。三九已至洞慎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間击费,已是汗流浹背拢蛋。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔫巩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓快压,卻偏偏與公主長得像圆仔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔫劣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355