菜鳥程式猿之SSO實際應用
阿新 • • 發佈:2018-12-20
SSO核心原理:
1.子系統之間session不能實現共享,cookie在不同域名下時也不能共享的,為此我們需要一個相同的頂級域名(如:aaa.yanxiaohui.cn
,bbb.yanxiaohui.cn)
2.在使用者登入操作完成的時候(即單點登入成功後)我們向頂級域名寫入cookie
3.在訪問這個頂級域名下的其他系統的時候我們只驗證頂級域名下有沒有指定的cookie存在,如果存在,校驗其有效性,通過則放行,由此實
現單點登入操作,不存在則或失效則跳轉至單點登入的登入頁。
工程中實現方式:
一、SSO未登入
當SSO登入頁登入成功,生成token,放入tokenMap(自定義存放token的集合)中,並重定向至backUrl,拼接引數SSO_TOKEN_NAME(自定義的請求引數),其value就是token。 重定向後,被SSO攔截(SSO過濾請求的處理機制) 判斷子系統的session中是否有token 有:校驗token 校驗通過:放行請求 校驗不通過攔截:重定向至SSO登入頁 無:判斷請求引數中是否有SSO_TOKEN_NAME 無:重定向至SSO登入頁 有:從tokenMap中獲取token的物件,並將其放入子系統請求的session中,再重定向至backUrl,並去掉請求引數SSO_TOKEN_NAME
二、SSO已登入
被SSO攔截(SSO過濾請求的處理機制) 判斷子系統的session中是否有token(此時cooike的域名和path都應該相同) 有:進行token是否有效的校驗 校驗通過:放行請求 校驗不通過攔截:重定向至SSO登入頁 無:判斷請求引數中是否有SSO_TOKEN_NAME 無:從cookie中獲取token,重定向到backurl,SSO攔截,重複1.2的操作 有:從tokenMap中獲取token的物件,並將其放入子系統請求的session中,再重定向至backUrl,並去掉請求引數SSO_TOKEN_NAME