單點(diǎn)登錄:簡(jiǎn)稱為 SSO,是比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一塔嬉。SSO的定義是在多個(gè)應(yīng)用系統(tǒng)中玩徊,用戶只需要登錄一次就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。簡(jiǎn)單來(lái)說(shuō)谨究,一個(gè)公司有多個(gè)應(yīng)用恩袱,都要進(jìn)行注冊(cè)登錄,退出的時(shí)候又要一個(gè)個(gè)退出胶哲。用戶體驗(yàn)很不好畔塔。單點(diǎn)登錄可以實(shí)現(xiàn):登錄的時(shí)候只要一次登錄,退出的時(shí)候只要一次退出鸯屿。
單點(diǎn)登錄實(shí)現(xiàn)的方式:
父域Cookie(同主域名)
- cookie: cookie的作用域由path和domain共同決定俩檬,domain的值為當(dāng)前域或其父域的域名/IP地址。path 默認(rèn)為當(dāng)前 Web 應(yīng)用的上下文路徑碾盟。
- 父域: 父域的cookie可以被子域所共享棚辽。
結(jié)論:可以將token儲(chǔ)存到父域中,將domain設(shè)置成父域名冰肴,path設(shè)置為根路徑屈藐。實(shí)現(xiàn)簡(jiǎn)單,但不支持跨主域名
認(rèn)證中心(不同主域名熙尉,最常用解決方案)
- 認(rèn)證中心: 一個(gè)專門(mén)負(fù)責(zé)處理登錄請(qǐng)求的獨(dú)立的 Web 服務(wù)联逻。(每個(gè)系統(tǒng)的登錄操作都是通過(guò)認(rèn)證中心實(shí)現(xiàn)的。)
實(shí)現(xiàn)過(guò)程:訪問(wèn)應(yīng)用時(shí)检痰,會(huì)判斷是否登錄包归,未登錄則會(huì)跳轉(zhuǎn)至認(rèn)證中心,認(rèn)證中心登錄成功之后會(huì)在認(rèn)證中心寫(xiě)入cookie铅歼,應(yīng)用中無(wú)法訪問(wèn)公壤。應(yīng)用則是通過(guò)認(rèn)證中心跳轉(zhuǎn)的url中取到用戶登錄成功的token换可,再將token存儲(chǔ)在當(dāng)前應(yīng)用中
結(jié)論 支持跨域,擴(kuò)展性好厦幅,是單點(diǎn)登錄的標(biāo)準(zhǔn)做法沾鳄。但當(dāng)應(yīng)用A中使用iframe嵌入應(yīng)用B時(shí),則會(huì)出現(xiàn)一閃而過(guò)的認(rèn)證中心登錄界面。
LocalStorage 跨域(不同主域名)
采用LocalStorage存儲(chǔ)token, 但localStorage不支持跨域确憨,則需要登錄一個(gè)網(wǎng)頁(yè)時(shí)译荞,需要在本網(wǎng)頁(yè)在localStorage時(shí),也需要為其他的頁(yè)面寫(xiě)入相應(yīng)的token.
- iframe: 可以嵌入其他頁(yè)面休弃,通過(guò)postMessage進(jìn)行安全的傳值吞歼。
- 目標(biāo)網(wǎng)頁(yè): 可以通過(guò)addEventListener監(jiān)聽(tīng)postMessage的信息,從而得到相應(yīng)的token信息塔猾。
擴(kuò)充
域名分級(jí)
com浆熔、.cn 為一級(jí)域名(也稱頂級(jí)域名),.http://com.cn桥帆、http://baidu.com 為二級(jí)域名医增,http://sina.com.cn、http://tieba.baidu.com 為三級(jí)域名老虫,以此類(lèi)推叶骨,N 級(jí)域名就是 N-1 級(jí)域名的直接子域名。參考文章
面試官:來(lái)說(shuō)說(shuō)單點(diǎn)登錄的三種實(shí)現(xiàn)方式
單點(diǎn)登錄