如果你已知道,請略過本節(jié)!
SSO核心意義就一句話:一處登錄,處處登錄;一處注銷,處處注銷。即:在多個應用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統(tǒng)。
很多人容易把SSO與OAuth搞混。這里簡單說明一下:
OAuth也可簡單總結為一句:基于各種懶和YY的原因,拿別人的登錄系統(tǒng)來用。
至于官方說的,是一種授權協(xié)議,為網(wǎng)站用戶授權第三方應用訪問自己在網(wǎng)站…(此處省略N多字)可自行百度。
SSO的實現(xiàn)方式雖然有很多種,但大的框架不會脫離下圖結構的:
即所有的登錄驗證,登錄狀態(tài)存儲都在SSO授權中心處理(圖中的www.sso.com),其他站點或者使用瀏覽器跳轉(Response.Redirect)或者使用服務器端http post來與SSO授權中心進行通信驗證。下面是百度里比較知名的幾種實現(xiàn)方式,我會介紹一下他們的優(yōu)缺點,并提出自己最終的解決方案!
從感情上來說,這是我最喜歡的一種方式,如果不是我后面提到的幾個致命的缺點,我想我這輩子都只會用它了。CodeProject上ASP.NET版塊2010 年9月份最佳文章:Single Sign On (SSO) for cross-domain ASP.NET applications 對這種方式給出了完美的說明,并給出了一個可運行的實例!有興趣的同學可以讀一下原文,非常有意思。我這里說一下它的核心思想!
先看看登錄:
再看看,如果我想訪問一個XX列表頁面,流程是這樣的:
這種方式看似流程復雜,實際代碼實現(xiàn)起來非常簡單。domain1.com/domain2.com等站點不用做任何cookie,session等操作,只需要在后臺把認證相關的操作全部Redirect給sso.com,然后等著SSO處理完結果Redirect回來即可。具體代碼實現(xiàn)可以參考這位大神的第二篇文章:Single Sign On (SSO) for cross-domain ASP.NET applications: Part-II - The implementation
這種方式原理和代碼很簡單,但缺點也是非常明顯的:
這種方式的典型實現(xiàn),是以前園子里一個哥們寫的smartSSO:http://www.cnblogs.com/smartbooks/p/3800849.html
同上,他的實現(xiàn)核心也可以簡化為兩幅圖。
登錄時的情況:
訪問一個XX列表頁面的情況:
這種實現(xiàn)完全把與sso.com的交互放在了domain1.com/domain2.com后臺,通過httpclient post的方式。對于前端普通用戶,完全感覺不到sso.com的存在。
從流程圖上看,你可能覺得實現(xiàn)起來比第一種方式要簡單,但實際情況恰恰相反。因為你不但要在sso.com上做狀態(tài)存儲,還要在domain1.com等客戶站點做狀態(tài)判斷并跳轉。
該smartSSO只做了類似三方登錄的功能,并沒有提供客戶站點直接登錄的接口。
OpenAuth.Net(項目簡介及地址:http://www.cnblogs.com/yubaolee/p/OpenAuth.html )v1.2版綜合了以上兩種方式的優(yōu)點,實現(xiàn)了更為優(yōu)雅實用的SSO功能。
特點:
更多建議: