Session择膝、Token、API安全設(shè)計(jì)

名詞解釋

  • session 會(huì)話腹侣,維護(hù)用戶狀態(tài)齿穗。會(huì)話中關(guān)聯(lián)了用戶信息。
  • token 令牌跺株,用于簽權(quán)脖卖。

很多人糾結(jié)于token是什么,session又是什么畦木,但我認(rèn)為十籍,這就是兩個(gè)單詞唇礁,兩個(gè)概念而已娶吞,就看你怎么去實(shí)現(xiàn)并使用了械姻。

Session

session顧名思義就是會(huì)話,維護(hù)了用戶的狀態(tài)就是會(huì)話绣夺,這是為了解決http是stateless的問題發(fā)明的東西欢揖。

通常的用法是:

  1. 用戶使用賬號(hào)+密碼/手機(jī)號(hào)+驗(yàn)證碼登錄
  2. 后臺(tái)驗(yàn)證通過后會(huì)在Redis會(huì)話表里產(chǎn)生一條記錄,這條記錄就可以稱為會(huì)話她混!記錄里面有一個(gè)隨機(jī)的唯一值和用戶的信息坤按,這個(gè)隨機(jī)的唯一值會(huì)返回給客戶端保存,以后的接口通過這個(gè)唯一值進(jìn)行鑒權(quán)臭脓,這個(gè)唯一值可以稱為sessionId。
  3. 后臺(tái)接口帶上sessionId砚作,服務(wù)器拿到后去表里校驗(yàn)是否存在且有效嘹锁,有效則鑒權(quán)通過,無效則報(bào)錯(cuò)

Token

Token翻譯過來就是令牌米同,何為令牌瘤运,就是一個(gè)證明自己的證明。那拿剛才的sessionId來說拯坟,它又何常不是一個(gè)證明呢郁季?它證明了我之前是登錄過的钱磅,并且是有效的用戶似枕,所以我認(rèn)為,剛才的sessionId也可以稱為token凿歼,也有人認(rèn)為那就是token答憔。

看到這里估計(jì)又有人吐槽了,token的狀態(tài)是保存在客戶端的虐拓,session是服務(wù)端在管理狀態(tài)。這么理解的人是認(rèn)為城榛,session管理需要在后臺(tái)存表态兴,管理這個(gè)狀態(tài),而token后臺(tái)不需要保存工坊,因?yàn)閠oken里自帶了信息敢订,比如用戶基本信息、過期時(shí)間等昭齐,后臺(tái)每次收到直接解密校驗(yàn)即可矾柜,所以說token的狀態(tài)是保存在客戶端的。這么理解不是不可以里覆,很多人也是這么用的缆瓣,但有明確規(guī)定token就一定要帶信息嗎?別和我說JWT隧甚,JWT只是token的一種實(shí)現(xiàn)而已,不代表所有token都必須要有用戶信息忧便。我不反對(duì)有人這么理解帽借,因?yàn)閠oken和session本身就是概念,并不是規(guī)定切平,有不同的理解就可以有不同的實(shí)現(xiàn)辐董。

鑒權(quán)方案

剛其實(shí)已經(jīng)說到兩種實(shí)現(xiàn)了禀综,對(duì)于客戶端來講,拿到的就是一個(gè)字符串孤澎,并不關(guān)心它叫什么欠窒,也不關(guān)心服務(wù)端怎么去校驗(yàn)岖妄,只是每次請(qǐng)求里帶上這個(gè)字符串就好了。

服務(wù)端校驗(yàn)的兩種方式:

  1. 查表校驗(yàn)

    這種方式就是session的通常用法了荐虐,服務(wù)端會(huì)建表福扬,把所有用戶的會(huì)話都存在Redis。這種方式是有好處的狠裹,可控度更高汽烦,要以隨時(shí)把一個(gè)發(fā)出去的token/sessionId置為失效,這是保障安全的一個(gè)重要手段碗暗。如何隨時(shí)失效呢?因?yàn)榭蛻舳嗣看握?qǐng)求帶的token/sessionId都需要去Redis里查找看是否存在且有效晴圾,無效就無法訪問了噪奄,是否有效由后臺(tái)決定勤篮,失效操作可以進(jìn)行邏輯刪除或物理刪除。

  2. token自校驗(yàn)

    這種方式就是用戶登錄后账劲,服務(wù)端把用戶信息和過期時(shí)間或一些其它信息進(jìn)行加密處理金抡,生成一個(gè)token返回給客戶端,客戶端下次帶token上來時(shí)榛瓮,服務(wù)端不需要去查表禀晓,因?yàn)檫@個(gè)token是帶用戶信息的坝锰,先對(duì)token進(jìn)行解密什黑,能解密出用戶信息說明這個(gè)token是服務(wù)端簽發(fā)的,再判斷是否過期拣凹,如果沒過期就有效恨豁。

    此方案好處是不需要查表了嚣镜,省去了后臺(tái)session管理的一堆邏輯菊匿。也不需要考慮會(huì)話集群同步問題。但缺陷是這種token只能等它自動(dòng)失效徽职,無法由后臺(tái)決定是否失效佩厚。當(dāng)token被竊取進(jìn)行惡意攻擊時(shí)并沒有很好的對(duì)策抄瓦,看到這里就有人說了,定一個(gè)黑名單機(jī)制不就好了毯辅,如果定一個(gè)黑名單機(jī)制思恐,不也一樣要查表嗎立镶?那對(duì)比查表校驗(yàn)的優(yōu)勢(shì)又在哪呢媚媒?也會(huì)有人說把token的有效期設(shè)置短點(diǎn)不就安全了涩僻,但設(shè)置短了讓用戶頻繁登錄這種體驗(yàn)就很差了。

API安全設(shè)計(jì)

API的安全需要做好防竊取嵌巷、防篡改室抽、防重放等坪圾,安全都是相對(duì)的晓折,要在安全和效率做權(quán)衡。所以有效且安全的方案是Https + token + url簽名兽泄。

  • https用來保證鏈路的安全病梢,避免數(shù)據(jù)被截取
  • token是用來簽權(quán)的,看是否是合法的用戶
  • url簽名是把請(qǐng)求參數(shù)做一個(gè)不可逆的算法簽名觅彰,作用一是保證內(nèi)容沒有被篡改填抬,作用二是也保證了客戶端的合法性痴奏,因?yàn)樗惴ㄊ呛秃笈_(tái)約定的

有些公司會(huì)使用時(shí)間戳校驗(yàn)读拆,如果時(shí)間相差超過一定時(shí)間就認(rèn)為無效,這種做法還有待商榷暑诸,因?yàn)橛锌赡苡脩舻臅r(shí)間是手動(dòng)調(diào)過的个榕,就不能以用戶手機(jī)的時(shí)間為準(zhǔn)了西采,如果用服務(wù)器時(shí)間就需要經(jīng)常請(qǐng)求继控,也不合適,那就需要一套用戶和服務(wù)器時(shí)間同步機(jī)制了霹崎,個(gè)人認(rèn)為不是很必要尾菇。

總結(jié)

token自校驗(yàn)這種方式更適用于開放平臺(tái)派诬,類似微信這種千埃,在token中加入信息去校驗(yàn)調(diào)用者是否符合要求放可,同時(shí)權(quán)限范圍也在token中有指定耀里。

查表校驗(yàn)更適用于自家App冯挎,有token/sessionId就可以執(zhí)行此用戶的所有操作房官。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孵奶,一起剝皮案震驚了整個(gè)濱河市了袁,隨后出現(xiàn)的幾起案子载绿,更是在濱河造成了極大的恐慌崭庸,老刑警劉巖谊囚,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異余境,居然都是意外死亡灌诅,警方通過查閱死者的電腦和手機(jī)猜拾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門顽聂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來紊搪,“玉大人耀石,你說我怎么就攤上這事滞伟“鹉危” “怎么了鉴裹?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵督禽,是天一觀的道長(zhǎng)狈惫。 經(jīng)常有香客問我,道長(zhǎng)菱肖,這世上最難降的妖魔是什么稳强? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮褒繁,結(jié)果婚禮上棒坏,老公的妹妹穿的比我還像新娘俊抵。我一直安慰自己徽诲,他們只是感情好偷溺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尉共,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剧蚣。 梳的紋絲不亂的頭發(fā)上鸠按,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天扎运,我揣著相機(jī)與錄音绪囱,去河邊找鬼鬼吵。 笑死齿椅,一個(gè)胖子當(dāng)著我的面吹牛示辈,可吹牛的內(nèi)容都是我干的矾麻。 我是一名探鬼主播险耀,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼累奈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼搞乏!你這毒婦竟也來了查描?” 一聲冷哼從身側(cè)響起冬三,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤桥滨,失蹤者是張志新(化名)和其女友劉穎蒲每,沒想到半個(gè)月后邀杏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唤崭,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡小泉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年眯分,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片飘诗。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡息拜,死狀恐怖喳瓣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惠毁,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響曙咽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洒嗤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洁奈。 院中可真熱鬧间唉,春花似錦、人聲如沸利术。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽印叁。三九已至被冒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間轮蜕,已是汗流浹背昨悼。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肠虽,地道東北人幔戏。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像税课,于是被迫代替她去往敵國(guó)和親闲延。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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