傳統(tǒng)系統(tǒng)登錄
在企業(yè)發(fā)展初期新啼,公司通常只有一個(gè)web系統(tǒng)伤靠,web系統(tǒng)自身包含登錄模塊戴卜,用戶使用自己的賬號(hào)登錄系統(tǒng)逾条,很方便。下圖表示傳統(tǒng)系統(tǒng)登錄方案:
隨著企業(yè)的發(fā)展投剥,公司的web系統(tǒng)越來(lái)越多师脂,每個(gè)系統(tǒng)都包含各自的登錄模塊〗牵可以想象下用戶進(jìn)入每個(gè)系統(tǒng)都需要登錄吃警,登出也要一個(gè)個(gè)登出,非常影響用戶體驗(yàn)啄育。下圖表示傳統(tǒng)多系統(tǒng)登錄方案:
傳統(tǒng)系統(tǒng)登錄的改進(jìn)
web系統(tǒng)由單系統(tǒng)發(fā)展成多系統(tǒng)酌心,復(fù)雜性應(yīng)該由系統(tǒng)內(nèi)部承擔(dān),而不是用戶挑豌。無(wú)論web系統(tǒng)內(nèi)部多么復(fù)雜安券,對(duì)用戶而言,都是一個(gè)統(tǒng)一的整體浮毯,也就是說(shuō)完疫,用戶訪問(wèn)web系統(tǒng)的整個(gè)應(yīng)用群與訪問(wèn)單個(gè)系統(tǒng)一樣,登錄/登出只要一次就夠了债蓝。
我們都知道用戶每次請(qǐng)求系統(tǒng)壳鹤,都會(huì)攜帶瀏覽器上面的cookie(包含sessionId)信息作為請(qǐng)求頭發(fā)送到系統(tǒng)后端,后端通過(guò)sessionId判斷用戶是否登錄饰迹。
在此提出一個(gè)設(shè)想芳誓,如果多系統(tǒng)的session是共享的是不是問(wèn)題就解決了余舶?但是我怎么獲取到cookie里面sessionId呢?眾所周知锹淌,不同域下的cookie是沒(méi)辦法共享的匿值,那是不是可以在用戶登錄完成的時(shí)候?qū)ookie寫(xiě)到頂級(jí)域名上(頂級(jí)域名可以被所有子域名共享,例如share.com可以被web1.share.com和web2.share.com共享)
但是這種改進(jìn)方式存在著一些不足之處:
- 限制同一個(gè)頂級(jí)域名赂摆,如果有其他不同頂級(jí)域名系統(tǒng)接入進(jìn)來(lái)挟憔,必需要更改該域名,例如文web3.test.com烟号;
- 對(duì)于session共享绊谭,難以做到各個(gè)系統(tǒng)統(tǒng)一存放session信息(權(quán)限);
- 每個(gè)系統(tǒng)包含登錄模塊汪拥,各自開(kāi)發(fā)达传,造成人力資源浪費(fèi)。
初始單點(diǎn)登錄
為了解決傳統(tǒng)登錄系統(tǒng)帶來(lái)的復(fù)雜度問(wèn)題迫筑,單點(diǎn)登錄應(yīng)運(yùn)而生宪赶。單點(diǎn)登錄(Single Sign On),簡(jiǎn)稱(chēng)為 SSO脯燃,是比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一搂妻。SSO的定義是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)曲伊。
單點(diǎn)登錄將登錄模塊抽離出來(lái)成為一個(gè)統(tǒng)一認(rèn)證平臺(tái)叽讳,應(yīng)用系統(tǒng)無(wú)需開(kāi)發(fā)登錄模塊,只需簡(jiǎn)單接入統(tǒng)一認(rèn)證平臺(tái)坟募。下面是單點(diǎn)登錄示意圖:
我們將在下一篇通過(guò)以CAS作為代表岛蚤,分析下單點(diǎn)登錄是怎么實(shí)現(xiàn)的原理(當(dāng)然也可以通過(guò)OAuth2.0 Saml2.0 OpenID等實(shí)現(xiàn)單點(diǎn)登錄)。
下一篇:CAS設(shè)計(jì)原理