CAS單點登入登出原理
CAS單點登入原理
利用之前的角色及上面的用例,互動可以表示為如下步驟
1.使用者訪問application1,application1檢視session中是否有使用者登入的資訊(使用session的情況下),如果沒有,轉向到Server要求使用者認證身份,此時將會把此使用者的sessionId一併傳給Server。
2.使用者被轉向到Server認證成功後,Server生成ticket號和票據,將號和票據連同application1的SessionId一併存入伺服器端(可以選擇記憶體,也可以選擇資料庫持久化),並在使用者瀏覽器中設定cookie,確保已經登入。之後Server將使用者redirect到 application1,並且增加tickect號引數。
3。application1收到Server回傳回來的tickect號引數,根據這個引數application1在後臺 與Server建立安全連線,驗證tickect的有效性,並且接受Server返回的使用者資訊。登入成功。
4。使用者登入application2.application2發現使用者session中有未登入資訊,轉向到Server,Server取使用者 cookie,發現使用者已經登入成功過。於是把使用者在application2的sessionId記錄,返回ticket引數給 application2。application2驗證過程類似3。
CAS單點登出原理
類似於之前的角色,我們重寫單點登出的用例。使用者從application1登出。互動步驟如下:
1.使用者在application1點選登出,登出url被轉向到Server。
2.Server收到登出請求後,刪除使用者的cookie,並且從記憶體中取出之前使用者在所有的application中的登入的sessionId,依次向這些application傳送消除session請求。並且刪除之前記憶體中儲存的使用者登入的ticket號和票據的資訊。
3.各個application收到Server的請求後,被single sign out的Filter攔截,根據回傳的sessionId號,清除使用者session。
4.單點登出完畢。
Server端一直維護者使用者登入資訊的一個map,map中包含了使用者登入生成的ticket號和票據,使用者登入的application及在其上的sesseionId等。單點登入完全由Server端承擔,驗證由 application與Server在後臺(使用者不可見)建立安全連線完成。