公司:HJSD
G項(xiàng)目是在HJSD接觸的第一個(gè)項(xiàng)目,是一個(gè)年長(zhǎng)且功能強(qiáng)大的業(yè)務(wù)項(xiàng)目,子系統(tǒng)10+個(gè),包含了數(shù)據(jù)采集、任務(wù)調(diào)度、報(bào)表展示、業(yè)務(wù)管理等一系列的功能。各個(gè)子系統(tǒng)公用一套用戶體系,用戶一次注冊(cè)/登錄即可實(shí)現(xiàn)系統(tǒng)間的相互切換
一個(gè)項(xiàng)目多個(gè)子系統(tǒng),在項(xiàng)目進(jìn)行到后期是比較常見(jiàn)的情況。解決多系統(tǒng)之間授權(quán)的方式也有很多,比如我們常見(jiàn)的使用cas的方式。而在這個(gè)項(xiàng)目中,可能由于比較年長(zhǎng)的原因,它采用的是基于同域共享cookie的方式來(lái)進(jìn)行多個(gè)系統(tǒng)之間的授權(quán)
使用同個(gè)域名下的子域名(可以細(xì)化到二級(jí)域名、三級(jí)域名)
獨(dú)立用戶中心
自定義嚴(yán)謹(jǐn)?shù)腸ookie共享策略(加密策略、過(guò)期策略、獲取策略)

上圖是一個(gè)簡(jiǎn)單的邏輯流程:
1、用戶首次請(qǐng)求的時(shí)候,各子系統(tǒng)進(jìn)行第一輪的校驗(yàn)
2、系統(tǒng)未能從*.a.com的域名下獲取相關(guān)用戶信息,進(jìn)行頁(yè)面跳轉(zhuǎn),將用戶引導(dǎo)到用戶中心的登錄頁(yè)面
3、用戶在登陸頁(yè)面輸入用戶名密碼進(jìn)行登錄請(qǐng)求
4、用戶中心校驗(yàn)用戶信息,成功后將用戶信息寫(xiě)入*.a.com這個(gè)域名的cookie下。此處需要對(duì)信息進(jìn)行加密
5、用戶中心引導(dǎo)跳轉(zhuǎn)返回原來(lái)請(qǐng)求的子系統(tǒng)
6、子系統(tǒng)再次校驗(yàn)通過(guò)后,顯示用戶所需要請(qǐng)求的頁(yè)面
這種方式,其實(shí)依靠的是同域名cookie共享的方式,使得用戶登錄狀態(tài)可以給多個(gè)子系統(tǒng)獲取,早期許多系統(tǒng)采用的是這種方式,但這種方式卻存在著局限性,所以后期有了更好的解決方案。局限性如下:
1、同樣的方式,在多個(gè)域名的情況就會(huì)存在問(wèn)題了。
2、這種方式在不同語(yǔ)言中不能通用,因?yàn)椴煌Z(yǔ)言使用的cookie方案是不一樣的
3、cookie存在安全性的問(wèn)題,容易被cookie偽造實(shí)現(xiàn)系統(tǒng)登錄(實(shí)操過(guò)^_^)
雖然說(shuō)有局限,可是如果是用在內(nèi)部系統(tǒng),在設(shè)置白名單的情況下,這種方式不失為一種節(jié)省資源的多系統(tǒng)解決方案
如何解決cookie問(wèn)題?
雖然cookie的安全性問(wèn)題沒(méi)法根治,但如果必要的措施可以讓安全問(wèn)題沒(méi)那么高
1、對(duì)cookie進(jìn)行加密解密
2、限制多系統(tǒng)之間授權(quán)的方式,即A系統(tǒng)要登錄B系統(tǒng),需要通過(guò)一個(gè)特殊的頁(yè)面進(jìn)行授權(quán)跳轉(zhuǎn)才行,這個(gè)頁(yè)面在系統(tǒng)內(nèi)部,沒(méi)法通過(guò)外部訪問(wèn)
3、多個(gè)系統(tǒng)用多個(gè)加密授權(quán)的cookie,防止僅使用一個(gè)授權(quán)cookie
4、對(duì)用戶的最后訪問(wèn)路徑進(jìn)行監(jiān)控,因?yàn)樵L問(wèn)的路徑修改的頻率較高,進(jìn)行cookie竊取沒(méi)法竊取最新的(僅限參考)
最后,除了一些已經(jīng)穩(wěn)定運(yùn)行,迭代了多次的老項(xiàng)目,還是采用更安全的方式吧