分布式系列 單點登入和session共享

2021-08-03 01:23:23 字數 1018 閱讀 5552

最近跟組織一起學習,本來說好的學習大資料,不知道怎麼的,忽然一看材料,莫名轉戰到了分布式,搞起了高階架構的知識了。

看了看故事的梗概,還不錯,從基礎的分布式呼叫和架構設計,再到事務一致性,ha,到web應用,資料庫高可用和效能優化等一系列,也算是有乙個很不錯的體系,就計畫堅持著學下去了。

好了,囉嗦的夠多了,進入正題環節。

單點登入解決的問題其實很簡單,就是通過乙個使用者認證系統,打通所有關聯子系統的認證,從而達到安全高效訪問子系統的目的。而session共享是實現的單點登入的一種方式。

一、真偽單點登入

何為真單點,何為偽單點呢?其實理解起來也很簡單。

偽單點,舉個例子,比如一般中小公司裡的內部系統,這類系統一般只有一套使用者認證和許可權系統,各子系統之間也都是相互信任的,對使用者的驗證方式都是統一的,這類就是偽單點;

像兩個比較大型的系統之間的整合,比如a公司的a系統要整合到b公司的b系統中,兩個系統之前肯定不是統一的驗證方式,信任什麼的更不用提了,這類單點就稍微複雜一些,也就是真單點。

二、如何解決單點問題

關於解決單點問題,其實有比較成熟的策略了,適合各種簡單或複雜的業務場景。

1、簡單些的,比如,使用shiro進行會話管理;

2、伺服器間的session複製;

3、shiro+cas實現;

4、使用專業的sso產品。

一般來說,shiro方式實現就可以了,大型企業或需要實現真單點的,一般可能會使用到專業的sso產品。

三、實現原理

從上圖可以看出,客戶端在訪問系統時:

1、要先通過認證伺服器,認證伺服器在使用者登陸後,會頒發乙個ticket;

2、客戶端拿到ticket後,再去訪問子系統;

3、若子系統無法識別,或檢測到非法,會再次轉到認證伺服器,讓客戶端再次登入。

客戶端get到ticket後,在到達每個子系統之前,都會被檢測一下ticket,也就是檢查使用者的登入資訊。

分布式系列 單點登入和session共享實現

上篇文章簡單的描述了下單點登入的場景和解決單點登入問題的幾套方案。本文將從具體實現層面剖析如何實現sso和session共享。假設我們有三個子系統 project1 project2,project 3,此時,訪問每個子系統都會有自己的會話。只要他們之間互認了sessionid,我們就能任意在個子系...

Redis實現分布式單點登入

單點登入 single sign on 簡稱為 sso,是目前比較流行的企業業務整合的解決方案之一。sso的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。引進sso單點登入的邏輯,它完美的解決了在多服務下的session共享問題,但是又會帶來哪些問題呢?在高併發下,很...

redis實現SSO單點登入,集群,分布式鎖

使用redis實現單點登入,一般情況下都是配合cookie的.將生成的唯一的token資訊儲存在cookie中,當發生多服務呼叫時,都會在cookie中讀取到該值,再去redis中查詢是否有該使用者資訊存在.如此實現單點登陸 一般在微服務架構中,sso單點登陸會抽離出來作為乙個單獨的服務,來實現伺服...