單點登入設計

2021-09-30 15:02:39 字數 1575 閱讀 3809

sso是single sign-on的縮寫,翻譯成中文是單點登入的意思,所謂的單點登入是指在有多個應用系統的情況下,成功登入任一應用系統後再登入其他的系統是不用再輸入使用者名稱密碼登入而直接可以登入到系統。一般使用cookie技術實現。

瀏覽器需要支援cookie

所有的應用系統在同乙個頂級域內,比如:頂級域是www.ichaoying.com,那應用系統的網域名稱是相同的:sso.ichaoying.com,cms.ichaoying.com,oa.ichaoying.com

使用者登入成功後,生成乙個唯一的sso id,首先把sso id和對應使用者資訊寫入session資訊儲存中,sso id作為主鍵,然後把sso id寫入cookie,該cookie繫結的域是*.ichaoying.com,這樣所有的子域系統也可以訪問到這個cookie

sso id的生成規則: md5(loginname + 姓名 + 時間戳 + salt),salt是我們配置的乙個干擾字串

請求任何應用系統時,自動把上面的cookie傳送到應用系統,應用系統根據cookie的sso id去session資訊儲存查詢使用者資訊,如果找到則繼續提供服務,如果cookie沒有sso id或者在session資訊儲存沒有找到使用者資訊,則需要導向登入介面登入。

使用者請求流程:

create table session_info(

sso_id varchar(64) not null comment 'sso id, md5(loginname+username+timestamp+salt)' primary key,

create_time datetime not null comment '第一次登入的時間',

last_access_time datetime not null comment'最後一次訪問的時間',

user_info varchar(512) not null comment 'user info,json'

)

當使用者訪問某一服務或者資源url時,系統判斷是否存在名字為sso_id的cookie,如果有,則從資料庫讀取session資訊,如果不能讀的資訊,則需要重新登入;如果讀到,則比較last_access_time + 超時時間和當前時間,如果當前時間》last_access_time + 超時時間則表示超時,需要重新登入;如果last_access_time + 超時時間》當前時間表示驗證成功,然後更新last_access_time時間為當前時間。

last_access_time更新策略,資料庫的update操作與select相比,效能消耗會大幾個數量級,為了提高資料庫效能,需要採用一些策略:不是每次成功驗證session後都更新last_access_time欄位,比如我們這是session超時間隔是8個小時,那麼sesson超時誤差是20分鐘,那麼使用者是能容忍這種誤差的,我們可以利用這種誤差,如果last_access_time + 超時時間和當前時間的時間間隔大於20分鐘,那麼本次不更新last_access_time,如果小於20分鐘,則更新last_access_time。

採用filter,實現乙個filter,在filter中根據url判斷使用者的請求是否需要登入驗證,如果需要則驗證

spring mvc,實現乙個***,功能類似filter

單點登入設計實現(一)

什麼是單點登入?先來看看最初的應用架構 經典的單體架構,服務中包含了三個模組,部署在乙個伺服器中。使用者與服務端建立會話的方式是利用cookeis和session 見第二章節cookies和session 但是隨著系統內的業務越來越多,單個伺服器已經不能滿足效能要求,並且業務之間的互動越來愈多,業務...

多站點單點登入 SSO 設計

為什麼需要單點登入 產品剛上線時,一般由於使用者量少,所有的功能都放在一起,一般也不需要具體的單點登入。隨著使用者量和業務發展的需要,要求逐步將產品按功能或效能分為相應獨立的站點,並分開部署,這就需要在各個站點之間進行單點登入,以達到使用者一次登入,就可以使用多個站點。單點登入的實現 簡單方法 在同...

使用者登入 單點登入

首先是為啥要用單點登入的問題,單點登入也就是sso sso是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。1 任何系統都必須去登陸伺服器進行登入 2 伺服器就記住了登入狀態 3 其他系統訪問受保護資源,需要再次登入,跳轉到sso server登入的時候,伺服器告訴客戶端,已...