分布式系統(tǒng)
隨著軟件環(huán)境和需求的變化,軟件的架構(gòu)由單體結(jié)構(gòu)演變?yōu)榉植际郊軜?gòu),具有分布式架構(gòu)的系統(tǒng)叫做分布式系統(tǒng),分布式系統(tǒng)的運(yùn)行通暢依賴網(wǎng)絡(luò),它將單體結(jié)構(gòu)系統(tǒng)拆分為若干服務(wù),服務(wù)之前通過網(wǎng)絡(luò)交互來完成用戶的業(yè)務(wù)處理,當(dāng)前流行的微服務(wù)架構(gòu)就是分布式架構(gòu),如下圖:

分布式認(rèn)證需求
分布式系統(tǒng)的每個(gè)服務(wù)都會(huì)有認(rèn)證、權(quán)限的需求,如果每個(gè)服務(wù)都實(shí)現(xiàn)一套認(rèn)證授權(quán)邏輯會(huì)非常冗余,考慮分布式系統(tǒng)共享性的特點(diǎn),需要由獨(dú)立的認(rèn)證服務(wù)處理系統(tǒng)認(rèn)證授權(quán)的請求;考慮分布式系統(tǒng)開放性的特點(diǎn),不僅對系統(tǒng)內(nèi)部提供認(rèn)證,對第三方系統(tǒng)也要提供認(rèn)證,分布式認(rèn)證的需求總結(jié)如下:
統(tǒng)一認(rèn)證授權(quán):
提供獨(dú)立的認(rèn)證服務(wù),統(tǒng)一處理認(rèn)證授權(quán)。
無論是不同類型的用戶,還是不同種類的客戶端(web、H5、APP),均采用一致的認(rèn)證、權(quán)限、會(huì)話機(jī)制,實(shí)現(xiàn)統(tǒng)一認(rèn)證授權(quán)。
要實(shí)現(xiàn)統(tǒng)一,則認(rèn)證方式必須可擴(kuò)展,支持各種認(rèn)證需求,比如:用戶名密碼認(rèn)證、短信認(rèn)證、二維碼、人臉識(shí)別等認(rèn)證方式,并可以非常靈活的切換。
應(yīng)用接入認(rèn)證:
應(yīng)提供擴(kuò)展和開放能力,提供安全的系統(tǒng)對接機(jī)制,并可開放部分API給接入第三方使用,一方應(yīng)用(內(nèi)部系統(tǒng)服務(wù))和第三方(第三方應(yīng)用)均采用統(tǒng)一機(jī)制接入。
分布式認(rèn)證方案
1. 選型分析
1、基于session的認(rèn)證方式
在分布式環(huán)境下,基于session的認(rèn)證會(huì)出現(xiàn)一個(gè)問題,每個(gè)應(yīng)用服務(wù)都需要在session中存儲(chǔ)用戶身份信息,通過負(fù)載均衡本地的請求分配到另一個(gè)應(yīng)用服務(wù)器需要將session信息帶過去,否則會(huì)重新認(rèn)證。

通常的做法有以下幾種:
Session復(fù)制:多臺(tái)應(yīng)用服務(wù)器之間同步session,使session保持一致,對外透明。
Session黏貼:當(dāng)用戶訪問集群中某臺(tái)服務(wù)器后,強(qiáng)制指定后續(xù)所有請求均落到此機(jī)器上。
Session集中存儲(chǔ):將Session存入分布式緩存中,所有服務(wù)器應(yīng)用實(shí)例統(tǒng)一從分布式緩存中存取Session。
2、基于token的認(rèn)證方式
基于token的認(rèn)證方式,服務(wù)器不用存儲(chǔ)認(rèn)證數(shù)據(jù),已維護(hù)擴(kuò)展性強(qiáng),客戶端可以吧token存在任意地方,并且可以實(shí)現(xiàn)web和App統(tǒng)一認(rèn)證機(jī)制。其缺點(diǎn)也很明顯,token由于自身包含信息,因此一般數(shù)據(jù)量較大,而且每次請求都需要傳遞,因此比較占帶寬。另外,token的簽名驗(yàn)簽操作也會(huì)給CPU帶來額外的處理負(fù)擔(dān)。

2. 技術(shù)方案
根據(jù)選型的分析,決定采用基于token的認(rèn)證方式,它的優(yōu)點(diǎn)是:
1、適合統(tǒng)一認(rèn)證的機(jī)制,客戶端、一方應(yīng)用、三方應(yīng)用都遵循一致的認(rèn)證機(jī)制。
2、token認(rèn)證方式對第三方應(yīng)用接入更適合,因?yàn)槟闼_放,可以使用當(dāng)前最流行的Oauth2.0、JWT等。
3、一般情況服務(wù)器端無需存儲(chǔ)會(huì)話信息,減輕了服務(wù)端的壓力。
分布式系統(tǒng)認(rèn)證技術(shù)方案如下圖:
