Spring Authorizaiton Server, 簡稱 sas漏麦,是一個授權(quán)服務(wù)器框架族奢,提供 OAuth2.1 與 Open Connect 1.0 認(rèn)證規(guī)范及其他規(guī)范的實現(xiàn)碧信,它建立在 Spring Security 之上耕蝉,為構(gòu)建 OpenID Connect 1.0 Identity Provider 和 OAuth2 授權(quán)服務(wù)器產(chǎn)品提供了一個安全铐刘、輕量級和可定制的基礎(chǔ)歧杏。
升級必要性
Spring Authorization Server 項目是 Spring 團(tuán)隊對原有的 Spring Security Oauth 模塊的升級镰惦,同時對 Oauth 協(xié)議的實現(xiàn)由 2.0 升級到最新的 2.1 版本,并且現(xiàn)在已經(jīng)停止了對該模塊的維護(hù)犬绒。另外 Spring 團(tuán)隊基于 Spring Security Oauth 的經(jīng)驗旺入,對大量代碼進(jìn)行了簡化,使認(rèn)證運(yùn)行效率變得更高凯力,可介入性以及可兼容性比起以前變得更加優(yōu)秀茵瘾。
OAuth 2.1 基于 Oauth2 的基礎(chǔ)上進(jìn)行更新,考慮到安全性的問題沮协,移除了 OAuth2 的簡化模式龄捡、密碼模式。由于現(xiàn)在越來越多的硬件設(shè)備具備智能化功能慷暂,對設(shè)備認(rèn)證也逐漸有了要求聘殖,OAuth2.1 本次新增了設(shè)備碼認(rèn)證模式,針對于無瀏覽器類設(shè)備進(jìn)行登錄使用行瑞。
JEECG 項目介紹
JeecgBoot 是一款基于 BPM 的低代碼平臺奸腺!前后端分離架構(gòu) SpringBoot 2.x/3.x,SpringCloud血久,Ant Design&Vue3突照,Mybatis-plus,Shiro氧吐,JWT讹蘑,支持微服務(wù)。強(qiáng)大的代碼生成器讓前后端代碼一鍵生成筑舅,實現(xiàn)低代碼開發(fā)座慰! JeecgBoot 引領(lǐng)新低代碼開發(fā)模式 OnlineCoding-> 代碼生成器 -> 手工 MERGE, 幫助 Java 項目解決 70% 的重復(fù)工作翠拣,讓開發(fā)更多關(guān)注業(yè)務(wù)版仔,既能快速提高效率,節(jié)省研發(fā)成本,同時又不失靈活性蛮粮!一系列低代碼能力:Online 表單益缎、Online 報表、Online 圖表然想、儀表盤 / 門戶設(shè)計莺奔、表單設(shè)計、流程設(shè)計又沾、報表設(shè)計弊仪、大屏設(shè)計 等等...
JEECG 開源項目于 2012 年底發(fā)布首版本,到 2013 年 CSDN/ITEYE 專家訪談為大家所認(rèn)知杖刷,從開始的谷歌 CODE 開源到現(xiàn)在的 Github,吸引了一大批粉絲驳癌!截止目前已近十個春秋滑燃,目前 Github 的 Star 近 4 萬、論壇會員達(dá) 2 萬多颓鲜、QQ 千人群超 40 個表窘。 JEECG BOOT 目前在 Github 中文 JAVA 項目排名第三位、Github 全球 JAVA 項目排名第 19 位甜滨、Github 上 JAVA 開發(fā)框架項目排名第一乐严。
- Github 地址:https://github.com/jeecgboot/JeecgBoot
JeecgBoot 登錄認(rèn)證
JeecgBoot 目前有四種登錄情況:
- PC 端用戶名密碼登錄(APP 登錄)
- 手機(jī)號登錄
- 三方社交平臺登錄(Github、釘釘衣摩、微信昂验、企業(yè)微信)
- CAS 登錄
目前這四種登錄情況的核心都是使用的自建 JWT token,使用 shiro 框架完成的登錄驗證及請求授權(quán)驗證艾扮,由 JeecgBoot 本身完全請求用戶的密碼驗證既琴、驗證碼驗證等等,兩個部分可以看作是完全分離的泡嘴。如同冰箱的功能是冷藏 + 冷凍甫恩,而我們需要保證放進(jìn)冰箱的食品有效期。
JeecgBoot 如何切換
在前文我們講到 JeecgBoot 的用戶驗證與授權(quán)驗證是分離式的酌予,所以我們本次切換的注意力只需要放在替換現(xiàn)在的 shiro磺箕,使用 Spring Authorization Server 進(jìn)行登錄驗證及請求授權(quán)驗證。
Spring Authoriztion Server 默認(rèn)支持授權(quán)碼模式抛虫、客戶端模式松靡、設(shè)備碼模式及刷新碼模式,并且提供了對應(yīng)的接口莱褒,同時也支持自定義擴(kuò)展击困。我們可以對 AuthenticationProvider 接口進(jìn)行實現(xiàn),具體實現(xiàn)邏輯可根據(jù)自身需求而定,最終只需要返回一個 OAuth2AccessTokenAuthenticationToken 對象即可阅茶。JeecgBoot 本次參考了 Shiro 原有的邏輯進(jìn)行實現(xiàn)蛛枚,只不過本次調(diào)整了手動生成 Token 轉(zhuǎn)成由 Spring Authorization Server 生成 Token,同時使用 Spring Authorization Server 對 redis 的集成脸哀,對生成的認(rèn)證信息保存至 redis 中蹦浦,JeecgBoot 剛好可以利用這點,完成對在線用戶強(qiáng)制退出功能的繼承撞蜂。
切換之前的邏輯路線為:
- 用戶請求登錄
- JeecgBoot 完成用戶密碼盲镶、驗證碼等認(rèn)證
- 使用用戶名密碼手動生成 JWT token
- 用戶攜帶 token 進(jìn)行請求時,由 shiro 對 token 進(jìn)行攔截獲取其中的用戶名蝌诡,對用戶進(jìn)行 token 校驗及權(quán)限校驗
切換之后的邏輯路線為:
- 用戶請求登錄
- JeecgBoot 完成用戶密碼溉贿、驗證碼等認(rèn)證。
- 使用用戶名訪問基于 Spring Authorization Server 擴(kuò)展的認(rèn)證模式進(jìn)行 token 生成浦旱,并保存至 redis 中宇色。
- 用戶攜帶 token 進(jìn)行請求時,Spring Authorization Server 對 token 進(jìn)行攔截獲取其中的用戶名颁湖,對用戶進(jìn)行 token 校驗及權(quán)限校驗宣蠕。
JeecgBoot 切換的原因
Jeecg 考慮到 JeecgBoot 的用戶群體越來越龐大,甚至部分用戶對編碼幾乎都不了解甥捺,JeecgBoot 需要降低使用的便利性抢蚀、安全性、擴(kuò)展性镰禾。而 Shiro 相對來說皿曲,功能太過單薄,擴(kuò)展性不足羡微,無法與 JeecgBoot 本身融為一體谷饿。本次 Spring Authorization Server 的加入,可以使認(rèn)證邏輯與 JeecgBoot 融為一體妈倔,并且自動滿足了對通用性認(rèn)證博投、跨平臺性藤抡、多平臺性認(rèn)證協(xié)議完成了集成哼审,讓 JeecgBoot 在認(rèn)證安全領(lǐng)域得到了補(bǔ)齊,更加深層次的保障了普通用戶對訪問安全功能的需要职烧。