系统间账号认证系统同步方案
系統(tǒng)間賬號認(rèn)證系統(tǒng)同步方案
?
基礎(chǔ)原理:(基于Web)
瀏覽器在個請求傳遞cookie到服務(wù)器,服務(wù)器對cookie增刪改查的操作, 寫入JSessionId實(shí)現(xiàn)與服務(wù)器Session的綁定,保持會話
單機(jī)情況下:一個域名,對應(yīng)一個cookie,對應(yīng)一個JsessionId,與一個服務(wù)器Session會話
?
基于原理解決方案需要解決兩個問題:
1. Cookie在不同域名(系統(tǒng))間的傳遞問題
2. 服務(wù)器Session在不同服務(wù)器
?
問題1的解決方案:
cookie中的數(shù)據(jù)有三個屬性:domain、path、name。cookie新增和刪除,沒有修改選項,name相同,domain以及path不同,當(dāng)做不同的cookie來處理
又衍生出了兩種情況:
在同一個域名以及子域名下面的處理方式:使用domain綁定頂級域名
在不同域名下面的系統(tǒng)的處理方式:通過sso的模式,傳遞ticket,驗(yàn)證ticket獲取用戶信息,生成自己的sessionId到cookie中
?
?
問題2的解決方案:
部署在同一臺服務(wù)器:使用堆外內(nèi)存,磁盤緩存來實(shí)現(xiàn):ehcache
部署在不同服務(wù)器:使用redis、memcache緩存來實(shí)現(xiàn)
實(shí)現(xiàn)方式:
框架:spring-session、shiro-SessionManager模塊、使用redis客戶端
自研:修改實(shí)現(xiàn)JavaEE關(guān)于Session的增刪改查,實(shí)現(xiàn)分布式回話
?
上述問題比較麻煩的就是不同域名下系統(tǒng)的解決方案:單點(diǎn)登錄
底層方案:
JavaEE接入Cas的客戶端和服務(wù)端實(shí)現(xiàn)手動實(shí)現(xiàn)單點(diǎn)登錄
使用框架:
spring-cas
shiro整合cas
其他方式:
零侵入整合業(yè)務(wù)系統(tǒng):https://www.cnblogs.com/baibaomen/p/sso.html
?
Tomcat容器其實(shí)實(shí)現(xiàn)了對應(yīng)的Cookie的配置,但是過于依賴容器,在代碼中實(shí)現(xiàn),而非在運(yùn)維層面上實(shí)現(xiàn)是更好的選擇。
?
參考資料:
單點(diǎn)登錄時序圖:https://www.cnblogs.com/baibaomen/p/sso-sequence-chart.html
github單點(diǎn)登錄資料:https://github.com/baibaomen/BaibaomenSsoLesson
域名之間的cookie共享情況:https://segmentfault.com/a/1190000006932934?utm_source=tag-newest
JavaEE基礎(chǔ)教程書籍:《JavaWeb整合開發(fā)王者歸來》熟悉JavaEE基本對象以及基礎(chǔ)流程以及原理,容器只是基礎(chǔ)規(guī)范的實(shí)現(xiàn)
轉(zhuǎn)載于:https://www.cnblogs.com/fly-piglet/p/11059300.html
總結(jié)
以上是生活随笔為你收集整理的系统间账号认证系统同步方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小说中描写欢爱的句子66句
- 下一篇: 在Salesforce中调用外部系统所提