之前做了單點(diǎn)登錄系統(tǒng)育特,然后也查閱了一些資料,參考著這些資料加上自己的理解,本文就聊一聊單點(diǎn)登錄系統(tǒng)以及實(shí)現(xiàn)原理烙无,但并不涉及代碼部分遍尺,希望此文能對(duì)你有所幫助。
首先要說(shuō)明的是迂苛,單點(diǎn)登錄并不是說(shuō)像咱們登錄 QQ 一樣鼓择,只能在一個(gè)設(shè)備登錄,這不叫單點(diǎn)登錄念搬。如果有人這么對(duì)你解釋摆出,要記得保持微笑。
1爷恳、為什么需要單點(diǎn)登錄系統(tǒng)
單點(diǎn)登錄在大型網(wǎng)站里使用得非常頻繁象踊,例如像天貓這樣的網(wǎng)站,在網(wǎng)站的背后是成百上千的子系統(tǒng)栈虚,不信往下看菊碟。
進(jìn)去天貓之后在刺,地址欄是這樣的:
然后你想看看男裝蚣驼,地址欄又變成這樣的了:
然后突然又想看看女鞋,地址欄又變了:
你看纯陨,就點(diǎn)了這幾下就涉及到三個(gè)子系統(tǒng),所以說(shuō)像天貓這種大型商城涉及到非常多的子系統(tǒng)咙轩。
用戶一次操作或交易可能涉及到幾十個(gè)子系統(tǒng)的協(xié)作阴颖,如果每個(gè)子系統(tǒng)都需要用戶認(rèn)證,讓用戶輸入用戶名密碼钾菊,不僅用戶會(huì)瘋掉偎肃,各子系統(tǒng)也會(huì)為這種重復(fù)認(rèn)證授權(quán)的邏輯搞瘋掉。
2滞详、單點(diǎn)登錄系統(tǒng)簡(jiǎn)介
單點(diǎn)登錄系統(tǒng)又稱 Single Sign On(以下簡(jiǎn)稱 SSO)喘落,所謂單點(diǎn)登錄就是說(shuō),在相互信任的應(yīng)用中稀火,只需登陸一次即可相互訪問(wèn)赌朋,也就是用戶的一次登錄能得到其他所有系統(tǒng)的信任。
舉個(gè)栗子:
你周末和小伙伴喜滋滋的去了游樂(lè)場(chǎng)玩耍沛慢,進(jìn)游樂(lè)場(chǎng)之后想玩云霄飛車团甲,然后工作人員對(duì)你們一通檢查,你覺(jué)得正常躺苦,檢查就檢查唄。
然后又去玩摩天輪嘀趟,工作人員又是對(duì)你們一通檢查愈诚,耽誤時(shí)間不說(shuō)牛隅,而且已經(jīng)檢查過(guò)了酌泰,再檢查也沒(méi)意義了陵刹,好吧,為了玩耍你忍了授霸。
你又想去玩過(guò)山車了,工作人員又把你攔住了显设,要檢查辛辨,統(tǒng)統(tǒng)檢查,這時(shí)候你可能就不能忍了指攒。
那么這個(gè)時(shí)候如果第一次檢查之后給你發(fā)個(gè)令牌僻焚,以后想玩所有的項(xiàng)目都不需要檢查了,想玩什么玩什么隙弛,多好狞山。
這就是所謂的單點(diǎn)登錄,只需一次登錄就行了总珠。
對(duì)于我們得項(xiàng)目來(lái)說(shuō)勘纯,無(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)一樣媒惕,登錄/注銷只要一次就夠了来庭。
3、單點(diǎn)登錄系統(tǒng)原理
sso 需要一個(gè)獨(dú)立的認(rèn)證中心肴盏,只有認(rèn)證中心能接受用戶的用戶名密碼等安全信息帽衙,其他系統(tǒng)不提供登錄入口,只接受認(rèn)證中心的間接授權(quán)恍飘。間接授權(quán)通過(guò)令牌實(shí)現(xiàn)谴垫,sso認(rèn)證中心驗(yàn)證用戶的用戶名密碼沒(méi)問(wèn)題,創(chuàng)建授權(quán)令牌乳怎,在接下來(lái)的跳轉(zhuǎn)過(guò)程中前弯,授權(quán)令牌作為參數(shù)發(fā)送給各個(gè)子系統(tǒng),子系統(tǒng)拿到令牌椿胯,即得到了授權(quán)剃根,可以借此創(chuàng)建局部會(huì)話,局部會(huì)話登錄方式與單系統(tǒng)的登錄方式相同廉油。
用戶登錄成功之后苗傅,會(huì)與 sso 認(rèn)證中心及各個(gè)子系統(tǒng)建立會(huì)話,用戶與
sso 認(rèn)證中心建立的會(huì)話稱為全局會(huì)話嘶炭,用戶與各個(gè)子系統(tǒng)建立的會(huì)話稱為局部會(huì)話。
單點(diǎn)登錄的原理如下圖所述:
對(duì)上圖簡(jiǎn)要說(shuō)明:
- 用戶訪問(wèn)系統(tǒng)1抑进,系統(tǒng) 1 發(fā)現(xiàn)用戶未登錄睡陪,跳轉(zhuǎn)至 sso 認(rèn)證中心,并將自己的地址作為參數(shù)信殊;
- sso 認(rèn)證中心發(fā)現(xiàn)用戶未登錄汁果,將用戶引導(dǎo)至登錄頁(yè)面;
- 用戶輸入用戶名密碼提交登錄申請(qǐng)鲸伴;
- sso 認(rèn)證中心校驗(yàn)用戶信息晋控,創(chuàng)建用戶與 sso 認(rèn)證中心之間的會(huì)話,稱為全局會(huì)話仲吏,同時(shí)創(chuàng)建授權(quán)令牌蝌焚;
- sso 認(rèn)證中心帶著令牌跳轉(zhuǎn)會(huì)最初的請(qǐng)求地址(系統(tǒng) 1);
- 系統(tǒng) 1 拿到令牌许帐,去 sso 認(rèn)證中心校驗(yàn)令牌是否有效毕谴;
- sso 認(rèn)證中心校驗(yàn)令牌,返回有效循帐,注冊(cè)系統(tǒng) 1舀武;
- 系統(tǒng)1使用該令牌創(chuàng)建與用戶的會(huì)話,稱為局部會(huì)話瘪匿,返回受保護(hù)資源
用戶訪問(wèn)系統(tǒng) 2; - 系統(tǒng) 2 發(fā)現(xiàn)用戶未登錄,跳轉(zhuǎn)至 sso 認(rèn)證中心嘁锯,并將自己的地址作為參數(shù)聂薪;
- sso 認(rèn)證中心發(fā)現(xiàn)用戶已登錄,跳轉(zhuǎn)回系統(tǒng) 2 的地址仁锯,并附上令牌昭雌;
- 系統(tǒng) 2 拿到令牌蝇率,去 sso 認(rèn)證中心校驗(yàn)令牌是否有效峡扩;
- sso 認(rèn)證中心校驗(yàn)令牌汁汗,返回有效妇斤,注冊(cè)系統(tǒng) 2站超;
- 系統(tǒng) 2 使用該令牌創(chuàng)建與用戶的局部會(huì)話乖酬。
4、單點(diǎn)注銷
單點(diǎn)注銷就是說(shuō)媳纬,在一個(gè)子系統(tǒng)中注銷施掏,所有子系統(tǒng)的會(huì)話都將被銷毀,如下圖所示:
sso 認(rèn)證中心一直監(jiān)聽(tīng)全局會(huì)話的狀態(tài)素挽,一旦全局會(huì)話銷毀狸驳,監(jiān)聽(tīng)器將通知所有注冊(cè)系統(tǒng)執(zhí)行注銷操作。
下面對(duì)上圖簡(jiǎn)要說(shuō)明:
- 用戶向系統(tǒng) 1 發(fā)起注銷請(qǐng)求撰糠;
- 系統(tǒng) 1 根據(jù)用戶與系統(tǒng) 1 建立的會(huì)話 id 拿到令牌阅酪,向 sso 認(rèn)證中心發(fā)起注銷請(qǐng)求;
- sso 認(rèn)證中心校驗(yàn)令牌有效术辐,銷毀全局會(huì)話辉词,同時(shí)取出所有用此令牌注冊(cè)的系統(tǒng)地址瑞躺;
- sso 認(rèn)證中心向所有注冊(cè)系統(tǒng)發(fā)起注銷請(qǐng)求;
- 各注冊(cè)系統(tǒng)接收 sso 認(rèn)證中心的注銷請(qǐng)求曼振,銷毀局部會(huì)話甲雅;
- sso 認(rèn)證中心引導(dǎo)用戶至登錄頁(yè)面。
希望你幫助到你,還請(qǐng)大家多多關(guān)注荠商,謝謝嘍~