用戶登錄態(tài)設(shè)計

背景

在賬號體系里恤磷,用戶登錄后拼缝,一般會生成一個加密的token保存在用戶端个扰,每次用戶端和服務(wù)端的交互會帶上它,從而服務(wù)端可以獲取用戶的信息萎津,而不需要每次都帶上用戶的賬號+密碼卸伞。我們稱這個token為用戶登錄態(tài),它其實(shí)是用戶通過密碼(獲取手機(jī)號+驗(yàn)證碼/掃碼等方式)換取的一個通行證锉屈,這個通行證在一定時間內(nèi)荤傲,可以代表當(dāng)前用戶。

需求

  • 安全

    • 偽造
      當(dāng)我們費(fèi)盡心機(jī)的保護(hù)好用戶密碼的時候颈渊,如果用戶的登錄態(tài)可以被人偽造遂黍,我們的工作就會功虧一簣。因?yàn)樗丝梢圆煌ㄟ^密碼就能制造一個通行證俊嗽,如同本來我去辦理護(hù)照是需要帶上我個人身份證和其他資料才能辦理的雾家,現(xiàn)在有個制假證的,不需要你任何證件绍豁,只要知道你的名字芯咧,就可以幫你造一本護(hù)照出來。
      因此竹揍,防止被偽造是登錄態(tài)設(shè)計的基本需求敬飒。
    • 竊取
      很多時候,我們會在一些公關(guān)網(wǎng)絡(luò)上網(wǎng)芬位,如果網(wǎng)站沒有做類似https等加密的傳輸无拗,用戶端和服務(wù)端的請求很容易被截獲,而一般登錄態(tài)會存在cookie中昧碉,很容易被別人竊取英染。同樣的,知道你的登錄態(tài)后被饿,我就可以以你的身份去網(wǎng)站操作了四康。因此,如何防止被竊取的場景锹漱,也是登錄態(tài)設(shè)計的重要安全需求箭养。
  • 失效
    登錄態(tài)失效的場景有:過期慕嚷、修改密碼等哥牍。比如用戶修改了密碼毕泌,則之前設(shè)備的登錄態(tài)需要立即失效。

  • 用戶體驗(yàn)

  • 性能
    如果我們設(shè)計了一個很復(fù)雜的登錄態(tài)嗅辣,黑客很難破解撼泛,但是可能我們也要花上幾秒鐘才能解析出來,也是有問題的澡谭。賬號系統(tǒng)是基礎(chǔ)服務(wù)愿题,業(yè)務(wù)都會基于這些服務(wù)做功能,如果賬號的服務(wù)性能有問題蛙奖,對用戶體驗(yàn)是非常大的挑戰(zhàn)潘酗。

  • 互斥
    微信只允許一個手機(jī)處于活躍狀態(tài),而京東卻可以用一個賬號在兩個手機(jī)上一起下單雁仲。我們今天討論的是后者的設(shè)計方案仔夺,允許一個賬號同時活躍在兩個手機(jī)上的場景。要實(shí)現(xiàn)微信這樣即時通訊類應(yīng)用需要的互斥性攒砖,還有點(diǎn)不一樣缸兔。

實(shí)現(xiàn)

  • 核心數(shù)據(jù)


    核心數(shù)據(jù).png
  • TimeStamp:記錄創(chuàng)建登錄態(tài)的時間,用于后續(xù)的過期控制吹艇《杳郏可以精確到毫秒,精確度高受神,但就是無法通過userId來復(fù)現(xiàn)用戶使用的登錄態(tài)抛猖。
  • UserPlatform:APP和PC的安全性不一樣,所以可能對于不同平臺的有效期不一樣路克,用這個字段來記錄當(dāng)前平臺樟结,會對后續(xù)的過期等策略有影響。
  • UserIP:記錄用戶IP精算,幫助后續(xù)判斷登錄態(tài)的使用場景瓢宦。如,對于pc環(huán)境灰羽,換了IP后驮履,可能該登錄態(tài)就自動失效了。
  • RandomX:每個用戶都有這樣的一個值存在服務(wù)器端廉嚼,用戶修改密碼后玫镐,服務(wù)端的值隨機(jī)變化,之前的登錄態(tài)中的RandomX不再匹配怠噪,實(shí)現(xiàn)T除登錄態(tài)的作用恐似。
  • 核心數(shù)據(jù)加密
    在登錄態(tài)的場景中,加密算法一般采用對稱加密傍念,如DES/AES等矫夷。加密除了輸入加密串葛闷,還需要一個key和iv,可以將key和iv都取一樣的值双藕,也可以采用多組key和iv淑趾,多組的場景就需要在登錄態(tài)中標(biāo)志下。
  • 外層數(shù)據(jù)


    外層數(shù)據(jù).png
  • 版本號:后續(xù)方便版本升級
  • 簽名:為了保證登錄態(tài)不被篡改和快速驗(yàn)證其有效性忧陪,在前面可以加簽名扣泊。算法自選,用常用的hash算法就可以了嘶摊。
  • 其他:如果在核心數(shù)據(jù)加密算法中想采用多組Key和IV的場景延蟹,在外層數(shù)據(jù)中需要添加一些其他信息來區(qū)分。當(dāng)然叶堆,這樣拼接出來的字符都是有意義的等孵,防止泄露過多信息,最后可以將整個串再使用類似base64的算法編碼一次蹂空。

總結(jié)

登錄態(tài)的設(shè)計需要兼顧性能和安全性俯萌,本文給到了一種比較常見的設(shè)計方案。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末上枕,一起剝皮案震驚了整個濱河市咐熙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辨萍,老刑警劉巖棋恼,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锈玉,居然都是意外死亡爪飘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門拉背,熙熙樓的掌柜王于貴愁眉苦臉地迎上來师崎,“玉大人,你說我怎么就攤上這事椅棺±缯郑” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵两疚,是天一觀的道長床估。 經(jīng)常有香客問我,道長诱渤,這世上最難降的妖魔是什么丐巫? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上递胧,老公的妹妹穿的比我還像新娘鸦做。我一直安慰自己,他們只是感情好谓着,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坛掠,像睡著了一般赊锚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屉栓,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天舷蒲,我揣著相機(jī)與錄音,去河邊找鬼友多。 笑死牲平,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的域滥。 我是一名探鬼主播纵柿,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼启绰!你這毒婦竟也來了昂儒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤委可,失蹤者是張志新(化名)和其女友劉穎渊跋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體着倾,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拾酝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卡者。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒿囤。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖崇决,靈堂內(nèi)的尸體忽然破棺而出蟋软,到底是詐尸還是另有隱情,我是刑警寧澤嗽桩,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布岳守,位于F島的核電站,受9級特大地震影響碌冶,放射性物質(zhì)發(fā)生泄漏湿痢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望譬重。 院中可真熱鬧拒逮,春花似錦、人聲如沸臀规。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塔嬉。三九已至玩徊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谨究,已是汗流浹背恩袱。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胶哲,地道東北人畔塔。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像鸯屿,于是被迫代替她去往敵國和親澈吨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理寄摆,服務(wù)發(fā)現(xiàn)棚辽,斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,790評論 25 707
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,930評論 6 13
  • 1 凌晨兩點(diǎn),我的手機(jī)鈴聲響起…… 我下意識的在床頭柜上拿起手機(jī)熙尉,接通了電話联逻。電話那頭是一陣讓人心痛的啜泣聲,聲音...
    偽文君閱讀 2,921評論 0 2