業(yè)務(wù)系統(tǒng)的增多導(dǎo)致用戶信息穆律、用戶登錄不便于統(tǒng)一管理, 基于此我們開始對(duì)單點(diǎn)登錄SSO和統(tǒng)一身份認(rèn)證服務(wù)CAS進(jìn)行探索. 當(dāng)前我們的科研管理系統(tǒng)已經(jīng)開發(fā)的差不多了俗批,由于每次開發(fā)學(xué)校的項(xiàng)目都需要導(dǎo)入教師信息,多個(gè)系統(tǒng)就造成了用戶數(shù)據(jù)難統(tǒng)一管理末贾,多個(gè)系統(tǒng)之間的用戶賬號(hào)密碼難管理蒜鸡,于是這幾天我們?cè)诳蒲邢到y(tǒng)開發(fā)基礎(chǔ)上提出了第二方案婶芭,使用統(tǒng)一身份認(rèn)證服務(wù)CAS對(duì)我校教師賬戶信息進(jìn)行管理皮服。
說實(shí)話楞艾,我們可以系統(tǒng)已經(jīng)開發(fā)近九成,系統(tǒng)業(yè)務(wù)早已成型龄广,如果實(shí)行這個(gè)方案需要對(duì)后端進(jìn)行一部分重構(gòu)硫眯。后端是基于eladmin簡(jiǎn)化過的框架,雖說這樣動(dòng)后端原框架中的也是比較費(fèi)力的择同,首先需要對(duì)框架有一定了解两入,其次對(duì)業(yè)務(wù)熟悉,會(huì)涉及到mybatispuls一對(duì)多奠衔,一對(duì)一的結(jié)構(gòu)谆刨,解耦用戶信息緩存塘娶,修改安全框架归斤。當(dāng)時(shí)我們甚至懷疑自己是否能完成這個(gè)任務(wù),在小桑的學(xué)長(zhǎng)的指導(dǎo)和參與改進(jìn)的幾個(gè)人的討論交流下刁岸,我們最終決定嘗試嘗試脏里。
我相信我們最終肯定能做出來,以后能服務(wù)更多的項(xiàng)目虹曙,我對(duì)大家有信心迫横。
差點(diǎn)誤入歧途。起初我們本想走微信公眾/小程序那套認(rèn)證流程酝碳,在科研管理系統(tǒng)后端通過appId和secret來認(rèn)證訪問我們的系統(tǒng)矾踱,但最后發(fā)現(xiàn)著并不是CAS的認(rèn)證流程,CAS只完成用戶賬戶認(rèn)證疏哗,因?yàn)橹皼]有接觸過SSO和CAS呛讲,我們這可的業(yè)務(wù)也不僅僅涉及身份驗(yàn)證,導(dǎo)致我們的登錄認(rèn)證流程老是乖乖的返奉,成了個(gè)四不象贝搁,最終在前幾天中午我們跟小桑學(xué)長(zhǎng)的一次討論中撥開了縈繞大腦的迷霧。
我們終于搞清楚了CAS認(rèn)證原理芽偏,簡(jiǎn)單白話說一下雷逆。首先它在功能上它只完成用戶身份認(rèn)證,驗(yàn)證通過給票據(jù)污尉,在業(yè)務(wù)系統(tǒng)通過票據(jù)換取用戶信息膀哲。為什么CAS能實(shí)現(xiàn)多個(gè)業(yè)務(wù)系統(tǒng)統(tǒng)一登錄呢往产?首先它有個(gè)公共的登錄頁(yè)面(還有其他的不止這些),這個(gè)頁(yè)面屬于CAS某宪,當(dāng)我們通過域名訪問該頁(yè)面捂齐,通過賬號(hào)密碼認(rèn)證通過CAS會(huì)在二級(jí)域名下的cookie保存用戶登錄的證明(類似token但不是,我們稱它TGT缩抡,用它可以到CAS換取業(yè)務(wù)票據(jù)ST)奠宜,同時(shí)也會(huì)帶著ST(Service Ticket,用來?yè)Q取用戶信息瞻想,一般只用一次)重定向到所要登錄的業(yè)務(wù)系統(tǒng)压真,該系統(tǒng)拿到ST會(huì)向CAS換用戶信息(到這里CAS的任務(wù)就完成了),之后拿到用戶信息與自己的數(shù)據(jù)庫(kù)比對(duì)無誤就讓用戶登錄蘑险,此時(shí)該業(yè)務(wù)系統(tǒng)會(huì)給登錄創(chuàng)建一個(gè)token并保存在業(yè)務(wù)系統(tǒng)域名下滴肿,實(shí)現(xiàn)下次免登,從中我們可以看出CAS做的事很簡(jiǎn)單佃迄,就是驗(yàn)證賬戶和返回賬戶信息泼差,之后就與CAS無關(guān)了。
未完待續(xù)呵俏。
記于 2020-12-5 周六堆缘,夜已深,倦鳥普碎。
文章同步更新到我的個(gè)人博客:https://elltor.com/