SSO (Single Sign On)

介紹

SSO英文全稱Single Sign On,單點(diǎn)登錄。SSO是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。它包括可以將這次主要的登錄映射到其他應(yīng)用中用于同一個(gè)用戶的登錄的機(jī)制。它是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。

實(shí)現(xiàn)機(jī)制

當(dāng)用戶第一次訪問應(yīng)用系統(tǒng)1的時(shí)候,因?yàn)檫€沒有登錄,會(huì)被引導(dǎo)到認(rèn)證系統(tǒng)中進(jìn)行登錄;根據(jù)用戶提供的登錄信息,認(rèn)證系統(tǒng)進(jìn)行身份校驗(yàn),如果通過校驗(yàn),應(yīng)該返回給用戶一個(gè)認(rèn)證的憑據(jù)--ticket;用戶再訪問別的應(yīng)用的時(shí)候就會(huì)將這個(gè)ticket帶上,作為自己認(rèn)證的憑據(jù),應(yīng)用系統(tǒng)接受到請求之后會(huì)把ticket送到認(rèn)證系統(tǒng)進(jìn)行校驗(yàn),檢查ticket的合法性。如果通過校驗(yàn),用戶就可以在不用再次登錄的情況下訪問應(yīng)用系統(tǒng)2和應(yīng)用系統(tǒng)3了。

要實(shí)現(xiàn)SSO,需要以下主要的功能:

系統(tǒng)共享

統(tǒng)一的認(rèn)證系統(tǒng)是SSO的前提之一。認(rèn)證系統(tǒng)的主要功能是將用戶的登錄信息和用戶信息庫相比較,對用戶進(jìn)行登錄認(rèn)證;認(rèn)證成功后,認(rèn)證系統(tǒng)應(yīng)該生成統(tǒng)一的認(rèn)證標(biāo)志(ticket),返還給用戶。另外,認(rèn)證系統(tǒng)還應(yīng)該對ticket進(jìn)行校驗(yàn),判斷其有效性。

信息識別

要實(shí)現(xiàn)SSO的功能,讓用戶只登錄一次,就必須讓應(yīng)用系統(tǒng)能夠識別已經(jīng)登錄過的用戶。應(yīng)用系統(tǒng)應(yīng)該能對ticket進(jìn)行識別和提取,通過與認(rèn)證系統(tǒng)的通訊,能自動(dòng)判斷當(dāng)前用戶是否登錄過,從而完成單點(diǎn)登錄的功能。
另外:
1、單一的用戶信息數(shù)據(jù)庫并不是必須的,有許多系統(tǒng)不能將所有的用戶信息都集中存儲(chǔ),應(yīng)該允許用戶信息放置在不同的存儲(chǔ)中,事實(shí)上,只要統(tǒng)一認(rèn)證系統(tǒng),統(tǒng)一ticket的產(chǎn)生和校驗(yàn),無論用戶信息存儲(chǔ)在什么地方,都能實(shí)現(xiàn)單點(diǎn)登錄。
2、統(tǒng)一的認(rèn)證系統(tǒng)并不是說只有單個(gè)的認(rèn)證服務(wù)器
當(dāng)用戶在訪問應(yīng)用系統(tǒng)1時(shí),由第一個(gè)認(rèn)證服務(wù)器進(jìn)行認(rèn)證后,得到由此服務(wù)器產(chǎn)生的ticket。當(dāng)他訪問應(yīng)用系統(tǒng)2的時(shí)候,認(rèn)證服務(wù)器2能夠識別此ticket是由第一個(gè)服務(wù)器產(chǎn)生的,通過認(rèn)證服務(wù)器之間標(biāo)準(zhǔn)的通訊協(xié)議(例如SAML)來交換認(rèn)證信息,仍然能夠完成SSO的功能。

WEB-SSO

用戶在訪問頁面1的時(shí)候進(jìn)行了登錄,但是客戶端的每個(gè)請求都是單獨(dú)的連接,當(dāng)客戶再次訪問頁面2的時(shí)候,如何才能告訴Web服務(wù)器,客戶剛才已經(jīng)登錄過了呢?瀏覽器和服務(wù)器之間有約定:通過使用cookie技術(shù)來維護(hù)應(yīng)用的狀態(tài)。Cookie是可以被Web服務(wù)器設(shè)置的字符串,并且可以保存在瀏覽器中。當(dāng)瀏覽器訪問了頁面1時(shí),web服務(wù)器設(shè)置了一個(gè)cookie,并將這個(gè)cookie和頁面1一起返回給瀏覽器,瀏覽器接到cookie之后,就會(huì)保存起來,在它訪問頁面2的時(shí)候會(huì)把這個(gè)cookie也帶上,Web服務(wù)器接到請求時(shí)也能讀出cookie的值,根據(jù)cookie值的內(nèi)容就可以判斷和恢復(fù)一些用戶的信息狀態(tài)。Web-SSO完全可以利用Cookie技術(shù)來完成用戶登錄信息的保存,將瀏覽器中的Cookie和上文中的Ticket結(jié)合起來,完成SSO的功能。

為了完成一個(gè)簡單的SSO的功能,需要兩個(gè)部分的合作:
1、統(tǒng)一的身份認(rèn)證服務(wù)。
2、修改Web應(yīng)用,使得每個(gè)應(yīng)用都通過這個(gè)統(tǒng)一的認(rèn)證服務(wù)來進(jìn)行身份校驗(yàn)。

CAS官網(wǎng)上的標(biāo)準(zhǔn)流程

具體流程如下:

  1. 用戶訪問app系統(tǒng),app系統(tǒng)是需要登錄的,但用戶現(xiàn)在沒有登錄。

  2. 跳轉(zhuǎn)到CAS server,即SSO登錄系統(tǒng),以后圖中的CAS Server我們統(tǒng)一叫做SSO系統(tǒng)。 SSO系統(tǒng)也沒有登錄,彈出用戶登錄頁。

  3. 用戶填寫用戶名、密碼,SSO系統(tǒng)進(jìn)行認(rèn)證后,將登錄狀態(tài)寫入SSO的session,瀏覽器(Browser)中寫入SSO域下的Cookie。

  4. SSO系統(tǒng)登錄完成后會(huì)生成一個(gè)ST(Service Ticket),然后跳轉(zhuǎn)到app系統(tǒng),同時(shí)將ST作為參數(shù)傳遞給app系統(tǒng)。

  5. app系統(tǒng)拿到ST后,從后臺向SSO發(fā)送請求,驗(yàn)證ST是否有效。

  6. 驗(yàn)證通過后,app系統(tǒng)將登錄狀態(tài)寫入session并設(shè)置app域下的Cookie。
    至此,跨域單點(diǎn)登錄就完成了。以后我們再訪問app系統(tǒng)時(shí),app就是登錄的。接下來,我們再看看訪問app2系統(tǒng)時(shí)的流程。

  7. 用戶訪問app2系統(tǒng),app2系統(tǒng)沒有登錄,跳轉(zhuǎn)到SSO。

  8. 由于SSO已經(jīng)登錄了,不需要重新登錄認(rèn)證。

  9. SSO生成ST,瀏覽器跳轉(zhuǎn)到app2系統(tǒng),并將ST作為參數(shù)傳遞給app2。

  10. app2拿到ST,后臺訪問SSO,驗(yàn)證ST是否有效。

  11. 驗(yàn)證成功后,app2將登錄狀態(tài)寫入session,并在app2域下寫入Cookie。
    這樣,app2系統(tǒng)不需要走登錄流程,就已經(jīng)是登錄了。SSO,app和app2在不同的域,它們之間的session不共享也是沒問題的。

問題:SSO系統(tǒng)登錄后,跳回原業(yè)務(wù)系統(tǒng)時(shí),帶了個(gè)參數(shù)ST,業(yè)務(wù)系統(tǒng)還要拿ST再次訪問SSO進(jìn)行驗(yàn)證,覺得這個(gè)步驟有點(diǎn)多余。他想SSO登錄認(rèn)證通過后,通過回調(diào)地址將用戶信息返回給原業(yè)務(wù)系統(tǒng),原業(yè)務(wù)系統(tǒng)直接設(shè)置登錄狀態(tài),這樣流程簡單,也完成了登錄,不是很好嗎?

其實(shí)這樣問題時(shí)很嚴(yán)重的,如果我在SSO沒有登錄,而是直接在瀏覽器中敲入回調(diào)的地址,并帶上偽造的用戶信息,是不是業(yè)務(wù)系統(tǒng)也認(rèn)為登錄了呢?這是很可怕的。

單點(diǎn)登錄,資源都在各個(gè)業(yè)務(wù)系統(tǒng)這邊,不在SSO那一方。 用戶在給SSO服務(wù)器提供了用戶名密碼后,作為業(yè)務(wù)系統(tǒng)并不知道這件事。 SSO隨便給業(yè)務(wù)系統(tǒng)一個(gè)ST,那么業(yè)務(wù)系統(tǒng)是不能確定這個(gè)ST是用戶偽造的,還是真的有效,所以要拿著這個(gè)ST去SSO服務(wù)器再問一下,這個(gè)用戶給我的ST是否有效,是有效的我才能讓這個(gè)用戶訪問。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Q:什么是單點(diǎn)登陸 在多系統(tǒng)應(yīng)用群眾登陸一個(gè)系統(tǒng),便可在其他所有系統(tǒng)中得到授權(quán)而無需再次登陸,包括單點(diǎn)登陸和單點(diǎn)注...
    BubbleM閱讀 1,034評論 0 2
  • 單點(diǎn)登錄是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。SSO的定義是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所...
    迷糊_閱讀 756評論 0 0
  • 主要介紹CAS SSO的認(rèn)證流程。有關(guān)這方面的內(nèi)容再網(wǎng)上也有很多資料,寫這篇總結(jié)目的一來是自己在理解這塊內(nèi)容的時(shí)候...
    spilledyear閱讀 9,935評論 1 17
  • 背景 在企業(yè)發(fā)展初期,企業(yè)使用的系統(tǒng)很少,通常一個(gè)或者兩個(gè),每個(gè)系統(tǒng)都有自己的登錄模塊,運(yùn)營人員每天用自己的賬號登...
    牛初九閱讀 325,132評論 91 714
  • 1. CAS 簡介 1.1. What is CAS ? CAS ( Central Authenti...
    人在碼途閱讀 9,883評論 3 51

友情鏈接更多精彩內(nèi)容