將多個系統的登陸認證步驟集中在登陸系統統一管理,用戶只需要登陸一次就可以在多個系統之間來回切換使用 ...
一般一家企業內部會有多個業務系統,多個系統相互協作,但每個系統都需要登陸密碼,比如:許可權系統,發佈系統,配置系統,郵件系統等,用戶使用每個系統都需要登陸操作,使用起來比較繁瑣,工作效率低下。此時就需要引入SSO來解決以上問題,把多個系統的登陸認證步驟集中在登陸系統統一管理,用戶只需要登陸一次就可以在多個系統之間來回切換使用;目前實現SSO的主流框架就是CAS
基於Cookie
將用戶名密碼加密之後存於Cookie中,之後訪問網站時在過濾器(filter)中校驗用戶許可權,從Cookie中取出用戶名密碼進行登錄,讓用戶從某種意義上覺得只登錄了一次統一認證中心方案原理
第一次訪問www.qiandu.com
- 標號1 用戶訪問http://www.qiandu.com,經過他的第一個過濾器(cas提供,在web.xml中配置)AuthenticationFilter,判斷是否登錄,如果沒有登錄則重定向到認證中心
- 標號2 www.qiandu.com發現用戶沒有登錄,則返回瀏覽器重定向地址;返回狀態碼302,然後讓瀏覽器重定向到cas.qiandu.com並且通過get的方式添加參數service,該參數目的是登錄成功之後會要重定向回來,因此需要該參數。並且你會發現,其實server的值就是編碼之後的我們請求www.qiandu.com的地址
- 標號3 瀏覽器接收到重定向之後發起重定向,請求cas.qiandu.com
- 標號4 認證中心cas.qiandu.com接收到登錄請求,返回登陸頁面
- 標號5 用戶在cas.qiandu.com的login頁面輸入用戶名密碼,提交
- 標號6 伺服器接收到用戶名密碼,則驗證是否有效,驗證邏輯可以使用cas-server提供現成的,也可以自己實現
- 標號7 瀏覽器從cas.qiandu.com那裡拿到ticket之後,就根據指示重定向到www.qiandu.com,請求的url就是上面返回的url
- 標號8 www.qiandu.com在過濾器中會取到ticket的值,然後通過http方式調用cas.qiandu.com驗證該ticket是否是有效的
- 標號9 cas.qiandu.com接收到ticket之後,驗證,驗證通過返回結果告訴www.qiandu.com該ticket有效
- 標號10 www.qiandu.com接收到cas-server的返回,知道了用戶合法,展示相關資源到用戶瀏覽器上
第二次訪問
- 標號11 用戶發起請求,訪問www.qiandu.com。會經過cas-client,也就是過濾器,因為第一次訪問成功之後www.qiandu.com中會在session中記錄用戶信息,因此這裡直接就通過了,不用驗證了
- 標號12 用戶通過許可權驗證,瀏覽器返回正常資源
訪問mail.qiandu.com
- 標號13 用戶在www.qiandu.com正常上網,突然想訪問mail.qiandu.com,於是發起訪問mail.qiandu.com的請求
- 標號14 mail.qiandu.com接收到請求,發現第一次訪問,於是給他一個重定向的地址,讓他去找認證中心登錄;用戶請求mail.qiandu.com,然後返回給他一個網址,狀態302重定向,service參數就是回來的地址
- 標號15 瀏覽器根據14返回的地址,發起重定向,因為之前訪問過一次了,因此這次會攜帶上次返回的Cookie:TGC到認證中心
- 標號16 認證中心收到請求,發現TGC對應了一個TGT,於是用TGT簽發一個ST(ticket),並且返回給瀏覽器,讓他重定向到mail.qiandu.com
- 標號17 瀏覽器根據16返回的網址發起重定向
- 標號18 mail.qiandu.com獲取ticket去認證中心驗證是否有效
- 標號19 認證成功,返回在mail.qiandu.com的session中設置登錄狀態,下次就直接登錄
- 標號20 認證成功之後就反正用想要訪問的資源了