前言
繼上一篇博文:可跨域的單點登錄(SSO)實現方案【附.net代碼】雖然實現了單點登錄,也存在很多不合理的地方。很多熱心的朋友也給出了很多指導性的意見,特別是 LoveCoder提出的意見。
在很多親自操刀過單點登錄的朋友看來,單點登錄很簡單啊,不過如此。但是還有很多如我一樣剛剛接觸過或者沒有接觸過單點登錄的朋友卻不清楚單點登錄具體該怎么做。雖然網上單點登錄的教程很多很多,大都是實現思路、實現原理,真正涉及到代碼級別的實現細節卻很少。
單點登錄產生的原因是為了解決多個子系統共享登錄狀態的問題,每個人的思想或者能力不同,實現方式可能都不盡相同。好比過河,各有各的招,有的人坐船過去,還有人拽着繩蹚水過去的,安全嗎?坐船船會漏,拽繩繩會斷,怎么辦?每個人身上再綁個救生圈,這樣安全了嗎?不見得。針對某個問題域我們每個人都想給出一個完美的解決方案,而現實往往是因為個人能力或者公司業務情況所限而做不到完美。我們只能做到首先要保證能解決存在的問題,然后針對使用情況做各種優化,好的系統是用出來的而不是設計出來的。
在這一篇博文中,主要優化的地方是:將輪詢跳轉寫cookie到各個分站改為使用ajax分發寫cookie到各個分站。
如有不正歡迎指教
改進方案
是在上一篇博文:可跨域的單點登錄(SSO)實現方案【附.net代碼】的基礎上進行的改進,如有疑惑請先查看上篇博文。
改進后的單點登錄交互效果如下:
具體代碼如下:
1.sso.com登錄驗證方法不再重定向,而是輸出一段js代碼進行ajax分發
后台代碼如下:
對應的試圖頁面如下:
2.各個分站jump方法的改變如下:
3.a.com和b.com中需要登錄的action驗證方式的優化:
總結
解決問題:
1.不需要各個分站之間來回跳轉寫cookie,而是在sso.com以ajax分發的形式向各個分站寫cookie
2.代碼更加干凈
未解決問題:
1.按需寫cookie
2.安全性驗證
3.不支持ajax登錄