基于二級域名下Cookie共享的SSO
網(wǎng)上已經(jīng)有很多基于二級域名下Cookie 共享的SSO 的解決方案,對于原理大家可能都很了解,無非就是登錄一個系統(tǒng),產(chǎn)生一個令牌保存到Client 端的cookie 中,這個cookie 是基于主域名
網(wǎng)上已經(jīng)有很多基于二級域名下Cookie 共享的SSO 的解決方案,對于原理大家可能都很了解,無非就是登錄一個系統(tǒng),產(chǎn)生一個令牌保存到Client 端的cookie 中,這個cookie 是基于主域名的,然后再登錄其它二級域名下的系統(tǒng),就會直接讀取主域名下的Cookie 中的令牌,不要重新登錄,方面用戶使用多個系統(tǒng)。正好做到的項目中用到這個SSO 登錄驗證,自己調試中遇到一些問題,以及解決方案,跟大家分享一下。
我的項目中有兩個系統(tǒng),域名分別是A.test.com,B.test.com(舉例) ,test.com 是一級域名,A.test.com&B.test.com是二級域名。任務是要做到在A 登錄后可以直接進入B 系統(tǒng),B 系統(tǒng)會驗證Cookie 的令牌信息,正確的令牌才允許訪問進入系統(tǒng)。A 系統(tǒng)訪問路徑是http://A.test.com/x,B系統(tǒng)的訪問路徑是http://B.test.com/y。
好了,下面開始說明一下我的解決歷程:
1. 編碼
在A 系統(tǒng)登錄成功后寫入Cookie
....
Cookie cookie=new Cookie("token","令牌信息");//關于令牌名稱可以約定一個,到時B 系統(tǒng)會根據(jù)這個名稱去獲取令牌信息,信息令牌是加密處理r 后的字符串,如何加密這里不再贅述。
....
cookie.setDomain("test.com");//是基于一級域名的
cookie.setMaxAge(1800);//設定Cookie 的有效期
response.addCookie(cookie);
,....
2. 測試檢查
通過http://A.test.com/x訪問后,Cookie 目錄出現(xiàn)一個administrator@test.com[1]的Cookie 文件,查看IE 緩存目錄,有一條名為x/的記錄,internet 地址為
Cookie:administrator@test.com/x,系統(tǒng)緩存目錄地址C:/Documents and
Settings/administrator/Local Settings/Temporary Internet Files,我的是XP 系統(tǒng),Cookie 目錄地址C:/Documents and Settings/administrator/Cookies。
,如果兩個系統(tǒng)直接是基于域名跑的,http://A.test.com,http://B.test.com,就沒有后面那個修改webapp name的問題了,只要確保寫Cookie 時,setDomain(一級域名) ,這里是"test.com" 。