單點登陸全稱Single Sign On(如下簡稱SSO),是指在多系統應用羣中登陸一個系統,即可在其餘全部系統中獲得受權而無需再次登陸,包括單點登陸與單點註銷兩部分。SSO是目前比較流行的企業業務整合的解決方案之一。瀏覽器
相比於單系統登陸,sso須要一個獨立的認證中心,只有認證中心能接受用戶的用戶名密碼等安全信息,其餘系統不提供登陸入口,只接受認證中心的間接受權。間接受權經過令牌實現,sso認證中心驗證用戶的用戶名密碼沒問題,建立受權令牌,在接下來的跳轉過程當中,受權令牌做爲參數發送給各個子系統,子系統拿到令牌,即獲得了受權,能夠藉此建立局部會話,局部會話登陸方式與單系統的登陸方式相同。這個過程,也就是單點登陸的原理。安全
server端以server羣如何生成、驗證ID的方式大體分爲兩種: 「共享Cookie」這個就是上面提到的共享session的方式,我倒以爲叫「共享session」來得好一點,本質上cookie只是存儲session-id的介質,session-id也能夠放在每一次請求的url裏。聽說這種方式不安全,我沒去細究,哪位大神能夠推薦下相關的資料,我後期補上。其實也是,畢竟session這項機制一開始就是一個server一個session的,把session拿出來讓全部server共享確實有點奇怪。SSO-Token方式由於共享session的方式不安全,因此咱們再也不以session-id做爲身份的標識。咱們另外生成一種標識,把它取名SSO-Token(或Ticket),這種標識是整個server羣惟一的,而且全部server羣都能驗證這個token,同時能拿到token背後表明的用戶的信息。咱們要討論的也是這種方式,一會上具體流程圖。cookie
瀏覽器端單點登陸還有很是關鍵的一步,這一步跟server端驗證token的方式無關,用最先的「共享session」的方式仍是如今的「token」方式,身份標識到了瀏覽器端都要面臨這樣的一個問題:用戶登陸成功拿到token(或者是session-id)後怎麼讓瀏覽器存儲和分享到其它域名下?同域名很簡單,把token存在cookie裏,把cookie的路徑設置成頂級域名下,這樣全部子域都能讀取cookie中的token。這就是共享cookie的方式(這才叫共享Cookie嘛,上面那個應該叫共享session)。session
單點登錄的有優勢提升用戶的效率。提升開發人員的效率和簡化管理。同時也有不利於重構的缺點url