SSO 單點登錄:一次登錄,處處登錄。 只需在一個登錄認證服務下進行登錄後,就可訪問所有相互信任的應用 同域 SSO 1. session-cookie機制:服務端通過cookie認證客戶端。 用戶第一次登錄後,服務端將返回一個cookie給客戶端(這個cookie包含session id),用戶下 ...
SSO 單點登錄:一次登錄,處處登錄。
只需在一個登錄認證服務下進行登錄後,就可訪問所有相互信任的應用
-
同域 SSO
1. session-cookie機制:服務端通過cookie認證客戶端。
用戶第一次登錄後,服務端將返回一個cookie給客戶端(這個cookie包含session id),用戶下一次發起請求將在header帶上這個cookie,服務端將能識別是哪一個客戶端。
/**
* 完全同域
* cookie 是埠無關的
*/
Cookie cookie = new Cookie("sso","ssoCookie");
cookie.setDomain("www.xxx.com"); //設置該cookie域,則在該域下的請求將帶上該cookie
cookie.setPath("/"); //該域下的所有路徑的請求都使用該cookie
response.addCookie(cookie);
/**
* 同父域
* cookie 是埠無關的
*/
Cookie cookie = new Cookie("sso","ssoCookie");
cookie.setDomain(".xxx.com");
cookie.setPath("/");
response.addCookie(cookie);
2. spring-session 共用: 解決同域下 集群 session共用的問題。(當服務端為集群而不是單點的時候,需要集群伺服器間session共用才能實現session-cookie機制的同域SSO)
實現方式:通過過濾器攔擊請求,獲取session數據保存到資料庫(session持久化);需要獲取session數據將統一從資料庫獲取。
-
跨域 SSO
1. session跨域: 同樣是通過cookie認證客戶端。
cookie共用: 將所有信任域的cookie設置為相同的值,這樣在不同域下發起的請求攜帶的cookie將會是一樣的。
/**
* 同父域
* cookie 是埠無關的
*/
Cookie cookie = new Cookie("sso","ssoCookie");
cookie.setDomain(getDomainName(request)); // 將信任的域的cookie設置為相同的值,這樣在不同域下登錄使用的cookie將會是一樣的,可以通過cookie校驗
cookie.setDomain("/");
response.addCookie(cookie);
2. Token身份認證
服務端不需要記錄session數據,用戶登錄後服務端將返回一個Token給客戶端,客戶端將這個Token保存起來;在下一次請求中將在header帶上該Token,如果通過服務端校驗,將能得到正確響應。