系統間帳號認證系統同步方案

系統間帳號認證系統同步方案html

 

基礎原理:(基於Web)git

瀏覽器在個請求傳遞cookie到服務器,服務器對cookie增刪改查的操做, 寫入JSessionId實現與服務器Session的綁定,保持會話github

單機狀況下:一個域名,對應一個cookie,對應一個JsessionId,與一個服務器Session會話redis

 

基於原理解決方案須要解決兩個問題:spring

1. Cookie在不一樣域名(系統)間的傳遞問題segmentfault

2. 服務器Session在不一樣服務器瀏覽器

 

問題1的解決方案:緩存

cookie中的數據有三個屬性:domain、path、name。cookie新增和刪除,沒有修改選項,name相同,domain以及path不一樣,當作不一樣的cookie來處理服務器

又衍生出了兩種狀況:cookie

在同一個域名以及子域名下面的處理方式:使用domain綁定頂級域名

在不一樣域名下面的系統的處理方式:經過sso的模式,傳遞ticket,驗證ticket獲取用戶信息,生成本身的sessionId到cookie中

 

 

問題2的解決方案:

部署在同一臺服務器:使用堆外內存,磁盤緩存來實現:ehcache

部署在不一樣服務器:使用redis、memcache緩存來實現

實現方式:

框架:spring-session、shiro-SessionManager模塊、使用redis客戶端

自研:修改實現JavaEE關於Session的增刪改查,實現分佈式回話

 

上述問題比較麻煩的就是不一樣域名下系統的解決方案:單點登陸

底層方案:

JavaEE接入Cas的客戶端和服務端實現手動實現單點登陸

使用框架:

spring-cas

shiro整合cas

其餘方式:

零侵入整合業務系統:https://www.cnblogs.com/baibaomen/p/sso.html

 

Tomcat容器其實實現了對應的Cookie的配置,可是過於依賴容器,在代碼中實現,而非在運維層面上實現是更好的選擇。

 

參考資料:

單點登陸時序圖:https://www.cnblogs.com/baibaomen/p/sso-sequence-chart.html

github單點登陸資料:https://github.com/baibaomen/BaibaomenSsoLesson

域名之間的cookie共享狀況:https://segmentfault.com/a/1190000006932934?utm_source=tag-newest

JavaEE基礎教程書籍:《JavaWeb整合開發王者歸來》熟悉JavaEE基本對象以及基礎流程以及原理,容器只是基礎規範的實現

相關文章
相關標籤/搜索