基本概念:Single Sign On 簡稱SSO,目前比較流行的企業業務整合的解決方案之一,是指在多系統應用羣中登陸一個系統,即可在其餘全部系統中獲得受權而無需再次登陸,包括單點登陸與單點註銷兩部分。php
爲了實現單點登陸,就須要在多個Server上達到驗證同一個ID的效果,我所知道的有兩種方法能夠達成這個目的。以前的一種方法是「共享Cookie」,讓各個Server共用一個session信息,讓客戶端在各個域名下都能持有這個ID,從而檢驗處ID的有效性,獲得ID對應的用戶信息。用戶登陸成功拿到session-id後分享到其餘域名下,把session-id放入Cookie中,把他們的Cookie域設置成頂級域名,這樣全部的子域都可以讀取到Cookie裏的session-id,好比谷歌公司,google.com是他的頂級域名,郵箱服務的mail.google.com和地圖服務map.google.com都是他的子域(這種方式的實現就是共享Cookie)。java
可是咱們會發現,共享Cookie的方式存在着許多的侷限性,首先,應用羣的域名須要統一,其次,應用羣各系統使用的技術(至少是web服務器)要相同,否則Cookie的Key值不一樣,沒法維持會話,而且共享Cookie沒法實現跨語言技術平臺登陸,好比java、.net、php之間,還有一點,就是Cookie自己並不安全。web
這個時候就出現了另外一種實現方式就是單點登陸,生成一種在整個Server羣惟一的標識SSO-Token(受權令牌),全部Server羣都可以驗證這個token,同時拿到token背後表明的用戶信息。相比於單系統登陸,sso須要一個獨立的認證中心,只有認證中心能接受用戶的用戶名密碼等安全信息,其餘系統不提供登陸入口,只接受認證中心的間接受權。間接受權經過令牌實現,sso認證中心驗證用戶的用戶名密碼沒問題,建立受權令牌,在接下來的跳轉過程當中,受權令牌做爲參數發送給各個子系統,子系統拿到令牌,即獲得了受權,能夠藉此建立局部會話,局部會話登陸方式與單系統的登陸方式相同。這個過程,也就是單點登陸的原理。簡單步驟以下:安全
用戶登陸成功以後,會與sso認證中心及各個子系統創建會話,用戶與sso認證中心創建的會話稱爲全局會話,用戶與各個子系統創建的會話稱爲局部會話,局部會話創建以後,用戶訪問子系統受保護資源將再也不經過sso認證中心,全局會話與局部會話有以下約束關係:服務器
咱們能夠經過博客園、百度、csdn、淘寶等網站的登陸過程加深對單點登陸的理解,注意觀察登陸過程當中的跳轉url與參數session
單點登陸天然也要單點註銷,在一個子系統中註銷,全部子系統的會話都將被銷燬。簡單步驟以下:網站