1. 概念
單點(diǎn)登錄SSO,說(shuō)的是在一個(gè)多系統(tǒng)共存的環(huán)境下,用戶在一處登錄后,就不用在其他系統(tǒng)中登錄,也就是用戶的一次登錄能得到其他所有系統(tǒng)的信任。
2. 單點(diǎn)登錄的要點(diǎn)
存儲(chǔ)信任;
驗(yàn)證信任;
3. 實(shí)現(xiàn)單點(diǎn)登錄的三種方式
3.1 以cookie作為憑證
最簡(jiǎn)單的單點(diǎn)登錄實(shí)現(xiàn)方式,是使用cookie作為媒介,存放用戶憑證。
用戶登錄父應(yīng)用之后,應(yīng)用返回一個(gè)加密的cookie,當(dāng)用戶訪問子應(yīng)用的時(shí)候,攜帶上這個(gè)cookie,授權(quán)應(yīng)用解密cookie進(jìn)行校驗(yàn),校驗(yàn)通過則登錄當(dāng)前用戶。
缺點(diǎn):
cookie不安全;
通過加密可以保證安全性,但如果對(duì)方掌握了解密算法就完蛋了;
不能跨域?qū)崿F(xiàn)免登。
3.2 通過JSONP實(shí)現(xiàn)
對(duì)于跨域問題,可以使用JSONP實(shí)現(xiàn)。用戶在父應(yīng)用中登錄后,跟session匹配的cookie會(huì)存到客戶端中,當(dāng)用戶需要登錄子應(yīng)用的時(shí)候,授權(quán)應(yīng)用訪問父應(yīng)用提供的JSONP接口,并在請(qǐng)求中帶上父應(yīng)用域名下的cookie,父應(yīng)用接收到請(qǐng)求,驗(yàn)證用戶的登錄狀態(tài),返回加密的信息,子應(yīng)用通過解析返回來(lái)的加密信息來(lái)驗(yàn)證用戶,如果通過驗(yàn)證則登錄用戶。
缺點(diǎn):
這種方法雖然能解決跨域問題,但是治標(biāo)不治本,沒有解決cookie安全性的問題。
3.3 通過頁(yè)面重定向的方式
最后一種介紹的方式,是通過父應(yīng)用和子應(yīng)用來(lái)回重定向進(jìn)行通信,實(shí)現(xiàn)信息的安全傳遞。
父應(yīng)用提供一個(gè)GET方式的登錄接口A(此時(shí)的父應(yīng)用接口固定,攻擊者無(wú)法去偽造),用戶通過子應(yīng)用重定向連接的方式訪問這個(gè)接口,如果用戶還沒有登錄,則返回一個(gè)登錄頁(yè)面,用戶輸入賬號(hào)密碼進(jìn)行登錄,如果用戶已經(jīng)登錄了,則生成加密的token,并且重定向到子應(yīng)用提供的驗(yàn)證token的接口B(此時(shí)的子應(yīng)用接口固定,攻擊者無(wú)法去偽造),通過解密和校驗(yàn)之后,子應(yīng)用登錄當(dāng)前用戶。
缺點(diǎn):
這種方式較前面的兩種方式,是解決了安全性和跨域的問題,但是并沒有前面兩種方式簡(jiǎn)單,安全與方便,本來(lái)就是矛盾的。
4. 使用獨(dú)立登錄系統(tǒng)
一般來(lái)說(shuō),大型應(yīng)用會(huì)把授權(quán)的邏輯和用戶信息的相關(guān)邏輯獨(dú)立成一個(gè)應(yīng)用,稱為用戶中心。用戶中心不處理業(yè)務(wù)邏輯,只是處理用戶信息的管理以及授權(quán)給第三方應(yīng)用。第三方應(yīng)用需要登錄的時(shí)候,則把用戶的登錄請(qǐng)求轉(zhuǎn)發(fā)給用戶中心進(jìn)行處理,用戶處理完畢后返回憑證,第三方應(yīng)用驗(yàn)證憑證,通過后就登錄用戶。