應該是原汁原味的原文)
一、假設有三個系統,分別是a.com、b.com和sso.com,各自代表a系統,b系統和認證中心
(疑問:若a.com系統已登入,當使用者進入b系統時,跳轉到sso後是怎麼判斷使用者已經登入的)
.1、在a.com系統在sso.com登入認證後(登入時是跳到sso.com登入的,因此生成的全域性會話是sso和瀏覽器的會話),sso生成全域性會話,這個會話中儲存生成的token。
2、當使用者訪問b系統時,發現b系統並未登入,於是跳轉到sso系統中,sso系統檢視本系統(即認證中心)中的session中是否已經儲存有登入狀態,即全域性會話,若有則說明使用者已經登入了,此時sso會把自己的session中的token放在需要跳轉到b系統的鏈結中作為引數傳過去,然後b系統再校驗token的合法性;若無則表示沒有登入。因為sso的全域性會話是和瀏覽器的會話,因此只在當前瀏覽器中有效,就算有人拿到了token,然後在別的電腦上拿著它通過鏈結去sso驗證,由於別的電腦的瀏覽器是沒有這個全域性會話的,因此是無法校驗成功的。
其實解決疑惑的最重要的一點時,使用者訪問b系統時,發現沒有登入後,是讓瀏覽器跳轉到sso系統,跳轉後實際上是sso與瀏覽器在會話
二、子系統如何校驗令牌?認證中心如何判斷令牌的合法性?
使用者輸入使用者名稱與密碼在認證中心登入成功後,使用userid+subsystemid+timemillis+randomstring作為原始令牌,再用rsa加密,得到發放給子系統的令牌,任何人拿到這個令牌都是解不開的,子系統使用這個令牌,首先要去認證中心校驗,校驗就是讓認證中心解密這個令牌,然後將解密後的內容(包括userid,當然你可以使用username)返回給子系統,子系統就知道當前登入的使用者id或者name了
因此,子系統和認證中心通訊必須保證安全,cas拋棄httpclient轉而使用自己開發的協議也是這個原因
單點登入原理與簡單實現
sso認證中心發現使用者未登入,將使用者引導至登入頁面 使用者輸入使用者名稱密碼提交登入申請 sso認證中心校驗使用者資訊,建立使用者與sso認證中心之間的會話,稱為全域性會話,同時建立授權令牌 sso認證中心帶著令牌跳轉會最初的請求位址 系統1 系統1拿到令牌,去sso認證中心校驗令牌是否有效 s...
sso單點登入原理與簡單實現
原理如下 使用者訪問系統1的受保護資源,系統1發現使用者未登入,跳轉至sso認證中心,並將自己的位址作為引數 sso認證中心發現使用者未登入,將使用者引導至登入頁面 使用者輸入使用者名稱密碼提交登入申請 sso認證中心校驗使用者資訊,建立使用者與sso認證中心之間的會話,稱為全域性會話,同時建立授權...
cas實現單點登入原理
基於cookie的單點登入核心原理 將使用者名稱密碼加密之後存於cookie中,之後訪問 時在過濾器 filter 中校驗使用者許可權,如果沒有許可權則從cookie中取出使用者名稱密碼進行登入,讓使用者從某種意義上覺得只登入了一次。該方式缺點就是多次傳送使用者名稱密碼,增加被盜風險,以及不能跨域。...