最強SSO單點登陸教程(一)多系統的複雜性

1、學習大綱

1.回顧會話機制和登陸機制. 由於學習單點登陸須要對Cookie和Session有較深的理解,因此咱們會先回顧知識.
2.多系統的複雜性帶來的問題,咱們如何解決這些問題?經過這個問題引出單點登陸的需求.
3.本身動手寫單點登陸的服務端和客戶端,經過這個案例加深對單點登陸的理解.
4.學習使用開源的單點登陸框架CAS,咱們使用cas-overlay-template模板來搭建CAS 服務端
5.搭建CAS的客戶端.咱們須要學習普通項目集成CAS客戶端以及SpringBoot項目集成CAS客戶端.php

目錄章節:java

  • SSO單點登陸教程(一)多系統的複雜性
  • SSO單點登陸教程(二)單點登陸流程分析
  • SSO單點登陸教程(三)單點註銷流程分析
  • SSO單點登陸教程(四)本身動手寫SSO單點登陸服務端和客戶端
  • SSO單點登陸教程(五)本身動手寫SSO單點註銷服務端和客戶端
  • SSO單點登陸教程(六)CAS-簡介&配置https
  • SSO單點登陸教程(七)CAS-搭建CAS Server服務端(靜態認證)
  • SSO單點登陸教程(八)CAS-搭建CAS Server服務端(JDBC認證)
  • SSO單點登陸教程(九)CAS-搭建CAS Client客戶端
  • SSO單點登陸教程(十)CAS-自定義CAS Server端登陸頁面

2、回顧會話機制

Web環境中的會話指一個瀏覽器與交互系統進行通訊的時間間隔,一般指從註冊進入系統到註銷退出系統之間所通過的時間,瀏覽器和服務器之間的會話是經過本地的cookie來實現的,經過下圖加深理解:web

瀏覽器訪問流程數據庫

1.瀏覽器在第一次訪問Tomcat服務器的時候,Tomcat服務器會在服務端建立session對象,並存儲到map中.key是session的id,value是session對象自己.
2.在響應的時候會把session的id經過cookie的方式寫到客戶端瀏覽器中.
3.瀏覽器會在本地的目錄中把session的id寫入到本地的cookie中.
4.在後續的請求中,都會讀取本地的cookie中的內容,並在請求的時候帶上對應的cookie.瀏覽器

服務端的session和客戶端的cookie如何存儲的,請看下面這張圖:tomcat

cookie和session的存儲安全

3、回顧登錄機制

有了會話機制,登陸狀態就好明白了,咱們假設瀏覽器第一次請求服務器須要輸入用戶名與密碼驗證身份,服務器拿到用戶名密碼去數據庫比對,正確的話說明當前持有這個會話的用戶是合法用戶,應該將這個會話標記爲「已受權」或者「已登陸」等等之類的狀態,既然是會話的狀態,天然要保存在會話對象中,Tomcat在會話對象中設置登陸狀態以下:服務器

HttpSession session = request.getSession();
  session.setAttribute("isLogin", true);

用戶再次訪問時,tomcat在會話對象中查看登陸狀態:cookie

HttpSession session = request.getSession();
    session.getAttribute("isLogin");

實現了登陸狀態的瀏覽器請求服務器模型以下圖描述:session

登錄機制

每次請求受保護資源時都會檢查會話對象中的登陸狀態,只有 isLogin=true 的會話才能訪問,登陸機制所以而實現。

4、多系統的複雜性

隨着公司的發展,公司內部使用的系統愈來愈多.對於公司來講是件好事情,起碼證實公司在蓬勃發展,可是對於使用系統的員工來講不是個好事情.
1.每一個系統都須要記住對應的帳號和密碼,若是有十個系統,意味員工須要記憶十套的帳號密碼,要記憶這些太痛苦了.因此不少員工的會把每一個系統的帳號密碼都設置成同樣的.
2.若是同時要使用CRM系統,WMS系統,OA系統,用戶須要登陸三次.
3.若是不使用了,還須要分別在三個系統中依次的註銷.

用戶在多系統下的操做

有沒有這樣的功能:我只須要登陸一次,公司裏面全部的系統均可以使用.只須要註銷一次,全部的系統都退出登陸了.若是能實現這樣的功能就很是好了.咱們理想的模型以下圖:

應用羣

雖然單系統的登陸解決方案很完美,但對於多系統應用羣已經再也不適用了,爲何呢?

單系統登陸解決方案的核心是cookie,cookie攜帶會話id在瀏覽器與服務器之間維護會話狀態。但cookie是有限制的,這個限制就是cookie的域(一般對應網站的域名),瀏覽器發送http請求時會自動攜帶與該域匹配的cookie,而不是全部cookie.

多系統的cookie

對應的cookie和session存儲以下圖:

多系統的cookie和session存儲

既然這樣,爲何不將web應用羣中全部子系統的域名統一在一個頂級域名下,例如「*.baidu.com」,而後將它們的cookie域設置爲「baidu.com」,這種作法理論上是能夠的,甚至早期不少多系統登陸就採用這種同域名共享cookie的方式。

然而,可行並不表明好,共享cookie的方式存在衆多侷限。首先,應用羣域名得統一;其次,應用羣各系統使用的技術(至少是web服務器)要相同,否則cookie的key值(tomcat爲JSESSIONID)不一樣,沒法維持會話,共享cookie的方式是沒法實現跨語言技術平臺登陸的,好比java、php、.net系統之間;第三,cookie自己不安全。

所以,咱們須要一種全新的登陸方式來實現多系統應用羣的登陸,這就是單點登陸。

做者:叩丁狼教育
連接:https://www.jianshu.com/p/9dc... 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索