之前也做過好幾個系統的sso接入,都是基於ssm架構的項目,而且沒有做前後端分離,接入相對簡單,最近有一個基於springboot+shiro+jwt的前後端分離項目需要接入sso平臺,大體過程是知道的,但是具體技術實現沒有頭緒,網上相關的資料也比較少,而且很粗略,經過幾天的研究,踩了許多的地雷,終於完成了sso接入,現在就把完整的方案分享一下和具體實現以及源碼都分享一下。
- 實現知識管理平臺的單點登陸接入。
- 能夠通過統一身份認證平臺進行登錄登出操作。
因爲項目採用shiro+jwt的認證方式, shiro 官方在 1.2 中就表明已經棄用了 CasFilter,故引入 pac4j 來做單點登錄的控制, pac4j支持對shiro的調用。重寫ShiroConfig整合cas權限認證,通過pac4j實現cas的跳轉。
具體分析如下:
- 當用戶第一次登錄應用系統時,過濾器會攔截,攜帶回跳的項目地址重定向到sso統一認證平臺:
eg:http://127.0.0.1:8085/cas/login?service=http//127.0.0.1:8081/index
2.登陸成功後sso會生成一個ticket一併返回給應用系統,作爲系統的認證憑據,然後跳回系統:
http//127.0.0.1:8081/index?ticket=*******
3..攔截到請求,通過解析拿到對應的登陸成功的用戶名,根據用戶名去查找對應的角色權限,再用jwt生成token,攜帶登陸成功所需要的數據重定向到前端頁面,完成登錄成功操作。
- 4.登出操作時,會並銷燬token信息,重定向到sso統一認證平臺。
具體代碼實現請看:springboot前後端分離接入cas技術方案及實現(二)