單點登入SSO

2022-02-23 00:53:09 字數 2923 閱讀 2206

一、什麼是單點登入sso(single sign-on)

sso是一種統一認證和授權機制,指訪問同一伺服器不同應用中的受保護資源的同一使用者,只需要登入一次,即通過乙個應用中的安全驗證後,再訪問其他應用中的受保護資源時,不再需要重新登入驗證。

二、單點登入解決了什麼問題

解決了使用者只需要登入一次就可以訪問所有相互信任的應用系統,而不用重複登入。

三、單點登入的技術實現機制

如下圖所示:

當使用者第一次訪問應用系統1的時候,因為還沒有登入,會被引導到認證系統中進行登入;根據使用者提供的登入資訊,認證系統進行身份效驗,如果通過效驗,應該返回給使用者乙個認證的憑據--ticket;使用者再訪問別的應用的時候,就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之後會把ticket送到認證系統進行效驗,檢查ticket的合法性(4,6)。如果通過效驗,使用者就可以在不用再次登入的情況下訪問應用系統2和應用系統3了。

從上圖可以看出sso的實現技術點:

1)所有應用系統共享乙個身份認證系統

統一的認證系統是sso的前提之一。認證系統的主要功能是將使用者的登入資訊和使用者資訊庫相比較,對使用者進行登入認證;認證成功後,認證系統應該生成統一的認證標誌(ticket),返還給使用者。另外,認證系統還應該對ticket進行效驗,判斷其有效性。

2)所有應用系統能夠識別和提取ticket資訊

要實現sso的功能,讓使用者只登入一次,就必須讓應用系統能夠識別已經登入過的使用者。應用系統應該能對ticket進行識別和提取,通過與認證系統的通訊,能自動判斷當前使用者是否登入過,從而完成單點登入的功能。

關於統一身份認證機制:如下圖

①使用者請求訪問業務系統。

②業務系統在系統中檢視是否有對應請求的有效令牌,若有,則讀取對應的身份資訊,允許其訪問;若沒有或令牌無效,則把使用者重定向到統一身份認證平台,並攜帶業務系統位址,進入第③步。

③在統一身份認證平台提供的頁面中,使用者輸入身份憑證資訊,平台驗證此身份憑證資訊,若有效,則生成乙個有效的令牌給使用者,進入第④步;若無效,則繼續進行認證,直到認證成功或退出為止。

④使用者攜帶第③步獲取的令牌,再次訪問業務系統。

⑤業務系統獲取使用者攜帶的令牌,提交到認證平台進行有效性檢查和身份資訊獲取。

⑥若令牌通過有效性檢查,則認證平台會把令牌對應的使用者身份資訊返回給業務系統,業務系統把身份資訊和有效令牌寫入會話狀態中,允許使用者以此身份資訊進行業務系統的各種操作;若令牌未通過有效性檢查,則會再次重定向到認證平台,返回第③步。

通過統一身份認證平台獲取的有效令牌,可以在各個業務系統之間實現應用漫遊。

四、單點登入的優點

1)提高使用者的效率。

使用者不再被多次登入困擾,也不需要記住多個 id 和密碼。另外,使用者忘記密碼並求助於支援人員的情況也會減少。 

2)提高開發人員的效率。

sso 為開發人員提供了乙個通用的身份驗證框架。實際上,如果 sso 機制是獨立的,那麼開發人員就完全不需要為身份驗證操心。他們可以假設,只要對應用程式的請求附帶乙個使用者名稱,身份驗證就已經完成了。 

3)簡化管理。

如果應用程式加入了單點登入協議,管理使用者帳號的負擔就會減輕。簡化的程度取決於應用程式,因為 sso 只處理身份驗證。所以,應用程式可能仍然需要設定使用者的屬性(比如訪問特權)。

五、單點登入的缺點

1)不利於重構

因為涉及到的系統很多,要重構必須要相容所有的系統,可能很耗時

2) 無人看守桌面

因為只需要登入一次,所有的授權的應用系統都可以訪問,可能導致一些很重要的資訊洩露。

單點登入sso(single sign on)說得簡單點就是在乙個多系統共存的環境下,使用者在一處登入後,就不用在其他系統中登入,也就是使用者的一次登入能得到其他所有系統的信任。單點登入在大型**裡使用得非常頻繁,例如像阿里巴巴這樣的**,在**的背後是成百上千的子系統,使用者一次操作或交易可能涉及到幾十個子系統的協作,如果每個子系統都需要使用者認證,不僅使用者會瘋掉,各子系統也會為這種重複認證授權的邏輯搞瘋掉。實現單點登入說到底就是要解決如何產生和儲存那個信任,再就是其他系統如何驗證這個信任的有效性,因此要點也就以下幾個:

只要解決了以上的問題,達到了開頭講得效果就可以說是sso。最簡單實現sso的方法就是用cookie,實現流程如下所示:

不然發現以上的方案是把信任儲存在客戶端的cookie裡,這種方法雖然實現方便但立馬會讓人質疑兩個問題:

對於第乙個問題一般都是通過加密cookie來處理,第二個問題是硬傷,其實這種方案的思路的就是要把這個信任關係儲存在客戶端,要實現這個也不一定只能用cookie,用flash也能解決,flash的shared object api就提供了儲存能力。

一般說來,大型系統會採取在服務端儲存信任關係的做法,實現流程如下所示:

以上方案就是要把信任關係儲存在單獨的sso系統(暫且這麼稱呼它)裡,說起來只是簡單地從客戶端移到了服務端,但其中幾個問題需要重點解決:

對於第乙個問題,一般可以採用類似與memcached的分布式快取的方案,既能提供可擴充套件資料量的機制,也能提供高效訪問。對於第二個問題,一般採取數字簽名的方法,要麼通過數字證書簽名,要麼通過像md5的方式,這就需要sso系統返回免登url的時候對需驗證的引數進行md5加密,並帶上token一起返回,最後需免登的系統進行驗證信任關係的時候,需把這個token傳給sso系統,sso系統通過對token的驗證就可以辨別資訊是否被改過。對於最後乙個問題,可以通過白名單來處理,說簡單點只有在白名單上的系統才能請求生產信任關係,同理只有在白名單上的系統才能被免登入。

以上只是提供了些簡單的實現技術,但需要強調的是這只是技術實現而已,僅僅是為了解決上面談到的一些問題,sso本身來說並不是什麼高科技,有了這個認識比較有利於我們深入探索sso

SSO單點登入

單點登入sso single sign on 就是在多個系統共存的環境下,使用者在一處登入 就不用在其他系統中登入,也就是使用者的一次登入就可以得到其他所有系統的信任。要點 儲存信任 驗證信任 最簡單實現sso的方法就是cookie,實現流程 然而cookie有如下缺點 1 cookie不安全 2 ...

sso單點登入

一 什麼是單點登入sso single sign on sso是一種統一認證和授權機制,指訪問同一伺服器不同應用中的受保護資源的同一使用者,只需要登入一次,即通過乙個應用中的安全驗證後,再訪問其他應用中的受保護資源時,不再需要重新登入驗證。二 單點登入解決了什麼問題 解決了使用者只需要登入一次就可以...

sso單點登入

1 sso single sign on 單點登入 解決了使用者只需要登入一次就可以訪問所有相互信任的應用系統,而不用重複登入,對使用者資訊進行統一管理。2 session共享 分布式中,為了提公升集群效能,我把使用者的session資訊儲存到redis中,key的格式例如 user session...