單點登陸系統SSO實現

前些天被問到單點登陸了,而據我當時作的這個模塊兩年了,如今從新溫習並記錄下,方便之後快速回憶起來nginx

1、什麼是單點登陸系統

SSO全稱Single Sign On。SSO是用戶只須要登陸一次就能夠訪問全部相互信任的應用系統redis

2、爲何須要單點登陸系統

分佈式集羣的項目由於每一個模塊都部署在不一樣的機器。若是第一次在A系統登陸,第二次訪問B系統,這個時候B系統並無保存用戶狀態,或者第一次nginx轉發到A系統的機器1,在機器1登陸,第二次訪問A系統,nginx轉發到了機器2,這些狀況下都是須要從新登陸。瀏覽器

爲了解決這種狀況,能夠有兩種機制:單點登陸、tomcat配置session複製緩存

session複製在集羣下,代價太高,可能致使系統資源消耗過多。tomcat

因此構建一個單點登陸系統,提供一個接口,供其餘模塊調用,來檢測用戶登陸狀態。實現就是使用redsi來模擬session,對session統一管理cookie

3、怎麼實現

一、首先sso系統提供登陸,校驗用戶,登出等基本用戶操做session

二、登陸的時候將用戶信息保存到redis中,並設置過時時間,(key能夠含有token,value爲用戶信息),請將用戶的token響應給瀏覽器cookie,並設置cookie的domain(domain用來設置域,方便子域名系統能把cookie攜帶過來)dom

三、登陸校驗:最好寫成一個過濾器,用戶每次請求當前domain設置的域名及其子域名的時候,會攜帶用戶cookie,過濾器從cookie裏取token,去redis裏查詢用戶信息,查到就放行,未查到就跳轉到登陸頁面分佈式

四、登出:用戶發起登出請求,登出接口獲取到cookie中的用戶的token,而後進行緩存請求,並清空cookietoken

 

 

參考連接:https://www.jianshu.com/p/cf41a10da952

相關文章
相關標籤/搜索