SSO單點(diǎn)登錄(仿天貓?zhí)詫?
需求提出·
隨著公司業(yè)務(wù)發(fā)展枪蘑,各種業(yè)務(wù)系統(tǒng)也在不斷上線(xiàn)(OA系統(tǒng)熙宇、運(yùn)營(yíng)后臺(tái)管理系統(tǒng)围段、各種數(shù)據(jù)后臺(tái)系統(tǒng),游戲賽事后臺(tái)系統(tǒng)等),運(yùn)營(yíng)人員需要去維護(hù)多套系統(tǒng)宏赘,每個(gè)系統(tǒng)都有各自的用戶(hù)模塊绒北,導(dǎo)致后臺(tái)維護(hù)這塊變得復(fù)雜,此時(shí)統(tǒng)一的用戶(hù)管理模塊顯得極其重要察署,可以極大提升運(yùn)營(yíng)效率闷游。剛好公司把這個(gè)任務(wù)交給我,所以我也了解了幾種單點(diǎn)登錄實(shí)現(xiàn)原理贴汪,最后以阿里系(天貓储藐、淘寶)的SSO為原型,仿照其實(shí)現(xiàn)自己公司的SSO嘶是。
需求分析·
1、什么是SSO蛛碌?SSO特點(diǎn)聂喇?
SSO英文全稱(chēng)Single Sign On,單點(diǎn)登錄蔚携。SSO是在多個(gè)應(yīng)用系統(tǒng)中希太,用戶(hù)只需要登錄一次就可以訪(fǎng)問(wèn)所有相互信任的應(yīng)用系統(tǒng)。它包括可以將這次主要的登錄映射到其他應(yīng)用中用于同一個(gè)用戶(hù)的登錄的機(jī)制酝蜒。它是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一
2誊辉、SSO最大難點(diǎn)是什么?
????????個(gè)人覺(jué)得SSO最大的難點(diǎn)是在各系統(tǒng)如何識(shí)別用戶(hù)是同一個(gè)用戶(hù)亡脑,即各系統(tǒng)如何識(shí)別訪(fǎng)問(wèn)系統(tǒng)群的是同一個(gè)用戶(hù)堕澄;所以此時(shí)就需要一個(gè)公共的key,當(dāng)用戶(hù)訪(fǎng)問(wèn)系統(tǒng)群中的某個(gè)子系統(tǒng)時(shí)霉咨,都會(huì)獲得這個(gè)key蛙紫,用于標(biāo)記訪(fǎng)問(wèn)系統(tǒng)的是同一個(gè)用戶(hù)。
?????????此處采用的方法為:用戶(hù)剛訪(fǎng)問(wèn)任一系統(tǒng)頁(yè)面時(shí)都會(huì)SSO生成mini_token,并保存在SSO中途戒,以后訪(fǎng)問(wèn)任一系統(tǒng)時(shí)候坑傅,用戶(hù)都會(huì)去SSO中獲取mini_token。具體方法如下:
1喷斋、當(dāng)用戶(hù)訪(fǎng)問(wèn)客戶(hù)端1(任一子系統(tǒng))時(shí)唁毒,用戶(hù)會(huì)先從客戶(hù)端1去請(qǐng)求SSO系統(tǒng)從SSO域的cookie中拉取mini_token,SSO接受到請(qǐng)求后返回mini_token重定向到客戶(hù)端1的域(PS:此處中若SSO域cookie中也不存在mini_token,則SSO生成一個(gè)mini_token塞進(jìn)自己cookie中星爪,然后重定向回客戶(hù)端1)浆西,然后客戶(hù)端1設(shè)置自己的mini_token cookie,這樣就保持了客戶(hù)端跟SSO具有同一的一個(gè)key顽腾。
2室谚、當(dāng)用戶(hù)打開(kāi)客戶(hù)端2首頁(yè)時(shí),客戶(hù)端2也會(huì)去請(qǐng)求SSO域cookie中拉取mini_token,此時(shí)因?yàn)橛脩?hù)之前訪(fǎng)問(wèn)過(guò)SSO,所以此時(shí)SSO域是存在mini_token的cookie的秒赤,直接從cookie中獲取mini_token后重定向回客戶(hù)端2猪瞬,客戶(hù)端2接收到mini_token后設(shè)置自己的mini_token cookie,至此入篮,你可以看到陈瘦,客戶(hù)端1、客戶(hù)端2潮售、SSO都持有相同mini_token cookie痊项,無(wú)論后面還有多少個(gè)系統(tǒng),打開(kāi)后都會(huì)去獲取SSO的mini_token cookie,以此保持用戶(hù)身份一致標(biāo)記
3酥诽、為什么說(shuō)mini_token是用戶(hù)身份標(biāo)記呢鞍泉?用戶(hù)登錄SSO時(shí)會(huì)攜帶mini_token,登錄成功后肮帐,生成訪(fǎng)問(wèn)令牌access_token,并且會(huì)以mini_token,access_token為鍵值對(duì)保存在redis中咖驮,當(dāng)用戶(hù)再打開(kāi)一個(gè)新的系統(tǒng)的時(shí)候,都會(huì)去拉取mini_token,用戶(hù)就能根據(jù)自己當(dāng)前的mini_token去獲得access_token,獲得自己的access_token后就可以去訪(fǎng)問(wèn)系統(tǒng)了训枢。我們可以看到托修,此時(shí)的mini_token其實(shí)就是代表用戶(hù)本身。
方法流程·
1恒界、登錄流程:
2睦刃、登出流程
實(shí)現(xiàn)部分代碼展示·
1、跨域代碼:跨域需要前后端配合完成
總結(jié)·
第一次寫(xiě)簡(jiǎn)書(shū)十酣,第一次畫(huà)拓?fù)鋱D涩拙,不好還請(qǐng)見(jiàn)諒。耸采。吃环。