前些天一位其他開發部門的同事找到我們了解一些關於SSO單點登錄的事,他們要做單點登錄,同時也需要和我們這邊的系統做集成,要我幫忙做一單點登錄,了解關於單點登錄的解決方案和資料,雖然做單點登錄已經很久了,自以為對SSO系統也算比較了解。但是被他這么一問,反倒是一下講不清楚,所以總結一下目前正在使用的SSO 解決方案的實現原理,也算是真正的再一次學習SSO 吧。
首先,單點登陸(SSO) 是為了一次登陸,就能在其他各子系統獲得訪問權限,無需用戶再輸入用戶名和密碼,所以一般會使用集中驗證方式,多個站點集中SSO驗證。如下圖所示:
所以,通過上圖,可以看出,當訪問主站是,會請求SSO 進行身份驗證,SSO系統驗證成功后,會給主站返回一個令牌,這樣在主站(OA)訪問其他子系統的時候,帶上令牌,這樣就實現了單點登錄,無需再驗證用戶名和密碼。
下面說說SSO 系統單點登錄的驗證過程:
當用戶訪問應用系統是,會驗證session 是否存在,如果session存在,則直接進入系統,如果session 不存在,說明用戶未登陸該系統,然后驗證用戶的主系統是否登陸,是否有令牌,如果有令牌則驗證令牌是否有效,如果令牌合法,那么進入該應用系統,反之則需要重新登陸,生成令牌。
注:這里的令牌,是通過加密的cookie傳輸的,由SSO系統頒發可在各分站中流通的標識。
令牌是由SSO系統頒發,系統接收到令牌之后,生成會話(Session)。 令牌通過Cookies的方式在各跨域分站中進行流通,所以SSO生成的令牌放在Cookie中返回給各個系統,並指定Cookie.Domain="oa.com"。
由於令牌是通過cookie 流通,所以各業務子系統都需要在oa.com這個域下,否者會接收不到SSO產生的令牌。其次是需要增加一個SysAdapter.aspx 中間頁,用於令牌的獲取和驗證。