單點登錄原理

2021-09-26 15:55 更新
完整排版可參考本人博客:http://www.cnblogs.com/yubaolee/p/sso.html

什么是SSO?

如果你已知道,請略過本節(jié)!

SSO核心意義就一句話:一處登錄,處處登錄;一處注銷,處處注銷。即:在多個應用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統(tǒng)。

很多人容易把SSO與OAuth搞混。這里簡單說明一下:

OAuth也可簡單總結為一句:基于各種懶和YY的原因,拿別人的登錄系統(tǒng)來用。

至于官方說的,是一種授權協(xié)議,為網(wǎng)站用戶授權第三方應用訪問自己在網(wǎng)站…(此處省略N多字)可自行百度。

 

SSO實現(xiàn)

SSO的實現(xiàn)方式雖然有很多種,但大的框架不會脫離下圖結構的:

即所有的登錄驗證,登錄狀態(tài)存儲都在SSO授權中心處理(圖中的www.sso.com),其他站點或者使用瀏覽器跳轉(Response.Redirect)或者使用服務器端http post來與SSO授權中心進行通信驗證。下面是百度里比較知名的幾種實現(xiàn)方式,我會介紹一下他們的優(yōu)缺點,并提出自己最終的解決方案!

 

實現(xiàn)方式一:強大的Cookie + Response.Redirect

從感情上來說,這是我最喜歡的一種方式,如果不是我后面提到的幾個致命的缺點,我想我這輩子都只會用它了。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 

這種方式原理和代碼很簡單,但缺點也是非常明顯的:

  1. 不支持ajax登錄驗證方式,因為ajax處理后臺Redirect相當復雜,這是該方式的致命缺點;
  2. 這能在相同的瀏覽器里實現(xiàn)單點登錄,因為客戶端網(wǎng)站沒帶任何狀態(tài)信息,只能借用sso.com的cookie判斷,不過這個缺點可以用URL帶參數(shù),用緩存代替cookie等解決;

實現(xiàn)方式二:HttpClient后臺提交

這種方式的典型實現(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的實現(xiàn)方式

OpenAuth.Net(項目簡介及地址:http://www.cnblogs.com/yubaolee/p/OpenAuth.html )v1.2版綜合了以上兩種方式的優(yōu)點,實現(xiàn)了更為優(yōu)雅實用的SSO功能。


特點:

  1. 當使用普通跳轉時使用Redirect快速驗證;
  2. 當又Ajax時使用后臺Post方式;
  3. 如果客戶站點不想做登錄,SSO占站點自帶登錄界面,可以完全把登錄授權等邏輯交給SSO處理;
  4. 真正的一處登錄,處處登錄,一處注銷,處處注銷;


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號