【SSO】一個簡單的單點登錄演示實現
業務系統的管理後台往往數量眾多,且各自需要一套用戶名密碼來進行登錄,不方便使用。因此花了點時間研究如何實現一套單點登錄系統。
眾所周知,SSO系統設計中,往往需要想辦法解決cookie不能跨域的問題,因此本系統要求各個需要接入SSO的業務系統,也進行cookie寫入。整體工作流程如下:

實際上在實現的時候,為了程式碼邏輯更加清晰易於維護,SSO本身做了前後端分離。
該項目基於springboot,前端使用了vue,後端埠9999,前端埠8080
如果你對該項目感興趣,並且進行了clone,為了能跑起來,你需要做如下工作:
- 在host文件中配置 127.0.0.1 sso.bot.com,127.0.0.1 alert.bot.com
- 在localhost安裝並啟動redis,埠保持默認6379
- 項目根路徑下的doc文件夾下,有mysql的建表語句
- 為了前端能跑起來,需要在sso-front-vue 目錄下執行 npm install 安裝相關依賴,然後再執行 npm run serve 進行啟動,啟動後訪問 sso.bot.com:8080 即可
也做了一個用於模擬業務系統的demo,地址如下,訪問埠為8888,該項目跑起來後,訪問項目根路徑會看到兩個登錄按鈕,一個普通的登錄,和一個用於跳轉到SSO登錄的按鈕,由於demo的目的是測試SSO能否正常工作,因此demo中未對普通登錄進行實現
//github.com/scaventz/x-sso-client-demo
要完成一套堪用的SSO,還有許多需要做的工作是本項目沒有完成的,比如以下兩個非常重要的點
- 簡單的系統接入方式,比如對Spring技術棧的客戶端可以考慮直接提供依賴包
- 針對不同的客戶端系統,只有前端的,只有後端的,前後端都有的,安全性要求高的,安全性要求不高的,提供不同的接入方式。本項目目前只演示了SSO返回token直接跳轉的方式,安全性不高,實際上更安全的方式,為SSO驗密成功,生成授權碼,跳轉會業務系統前端,業務系統前端將授權碼給到業務系統後端,其後端再通過這個授權碼拿到真正的token。這中間當然還需要考慮,是否為了安全性,需要引入非對稱加密演算法來進一步保證token的安全性。

