再見,Spring Security OAuth!!
官宣新品
最近,Spring 官方又推出了《Spring Authorization Server》專案:
本次將 《Spring Authorization Server》專案正式上線,去掉了之前的體驗狀態,此舉恰逢 0.2.0 版本釋出,這也是第一個正式支援的生產就緒版本。
專案前身
首先來看一則 2019 年 的 Spring Security OAuth 2.0 路線更新圖說明:
Spring Security OAuth 2.0 Roadmap Update
https://spring.io/blog/2019/11/14/spring-security-oauth-2-0-roadmap-update
大概的意思是:
Spring Security 專案用來支援授權伺服器不是一個合適的選擇,因為授權伺服器需要一個庫來進行構建,而 Spring Security 作為一個框架,不適合用來參與構建庫或產品,市面上又有大量商業和開源授權伺服器可以選擇,因此,Spring Security 團隊決定不再提供對授權伺服器的支援。。
另外,在 2018 年初,Spring 就宣佈了 Spring Security OAuth 專案正式進入維護模式,並且計劃在不久的將來會徹底停止支援。
我們進入 Spring Security OAuth 專案主頁:
https://projects.spring.io/spring-security-oauth/docs/oauth2.html
可以看到棄用通知:
Spring Security OAuth 專案已經被棄用了,最新的 OAuth 2.0 支援由 Spring Security 專案提供,有關更多詳細資訊,請參閱 OAuth 2.0 遷移指南:
https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide
即使 Spring Security OAuth 專案被 Spring Security 專案接管了,但 Spring Security 依舊不再包含對授權伺服器的支援,你可以用商用的、開源的,或者自己搭建,反正 Spring 不再提供了,純粹的只做框架了。。
專案背景
Spring 棄用授權伺服器之後,社群、部落格上的反饋、Gitter 中的討論和 GitHub 中的評論反響熱烈,一致強烈要求 Spring 提供對授權伺服器的支援,Spring 估計也是頂不住壓力了,或者真的意識到 Spring 生態確實是需要授權伺服器這玩意。。
於是在 2020/04/15 這天,Spring 團隊又宣佈新起《Spring Authorization Server》專案,以繼續提供對 Spring 授權伺服器的支援。
https://spring.io/blog/2020/04/15/announcing-the-spring-authorization-server
這是由 Spring Security 團隊領導的社群驅動專案,專注於為 Spring 社群提供授權伺服器支援,該專案也開始替換了 Spring Security OAuth 提供的對於 Authorization Server 的支援。
完整功能列表:
- The OAuth 2.0 Authorization Framework
- Authorization Grant
- Authorization Code
- Client Credentials
- Refresh Token
- Client Authentication
- HTTP Basic
- HTTP POST
- User Consent
- Authorization Code Grant
- Proof Key for Code Exchange by OAuth Public Clients (PKCE)
- OAuth 2.0 Token Revocation
- OAuth 2.0 Token Introspection
- OAuth 2.0 Authorization Server Metadata
- JSON Web Token (JWT)
- JSON Web Signature (JWS)
- JSON Web Key (JWK)
- OpenID Connect Core 1.0
- Authorization Code Flow
- OpenID Connect Discovery 1.0
- Provider Configuration Endpoint
- OpenID Connect Dynamic Client Registration 1.0
- Client Registration Endpoint
即將到來的功能:
- JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants
- OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens
- OpenID Connect Core 1.0
- UserInfo Endpoint
- OAuth 2.0 Token Exchange
這部分這裡就不展開介紹了,後續棧長有時間會進行詳細的理論+實戰,關注公眾號Java技術棧,第一時間推送。
為什麼需要授權伺服器?
這個你需要了解下 OAuth2.0 協議,它定義了四個角色:
-
Client:客戶端,即請求授權使用者資源的第三方應用程式;
-
Resource Owner:資源所有者,授權 Client 訪問其帳戶的使用者;
-
Authorization server: 授權伺服器,即服務商用於處理使用者授權認證的伺服器;
-
Resource server:資源伺服器,即服務商提供使用者受保護資源的伺服器;
另外,OAuth2.0 支援四種執行模式:
- 授權碼模式
- 隱式授權模式
- 密碼模式
- 客戶端模式
但一般我們使用較多的還是授權碼模式。
授權碼模式執行流程如下:
流程說明:
1、客戶端請求使用者給予授權;
2、使用者同意給予客戶端授權,並返回授權碼;
3、客戶端通過授權碼再向認證伺服器申請令牌;
4、認證伺服器對客戶端進行認證並返回令牌;
5、客戶端使用令牌向資源伺服器獲取資源;
6、資源伺服器驗證令牌,並返回資源;
如流程所示,OAuth2 授權碼模式的執行流程就少不了 Authorization Server(授權伺服器),授權伺服器用於授權認證,以及對 Access Token(令牌)的發放、管理、吊銷等。
授權伺服器可以和資源伺服器在不同的伺服器,也可以是同一臺伺服器。
總結
Spring 官方在 2020/04 才宣佈搞《Spring Authorization Server》這個專案,才一年多時間就可以上線使用了,效率槓槓的啊,團隊的目標也很明確,就是要使《Spring Authorization Server》專案最終成為 Java 平臺上 OAuth 2 Authorization Server 事實上的標準框架。
好了,今天的分享就到這了,後面棧長還會陸續解讀更多的 Java 主流技術,關注公眾號Java技術棧第一時間推送。另外,我也將 Spring 系列主流面試題和參考答案都整理好了,關注公眾號Java技術棧回覆關鍵字 "面試" 進行刷題。
最後,覺得我的文章對你用收穫的話,動動小手,給個在看、轉發,原創不易,棧長需要你的鼓勵。
版權申明:本文系公眾號 "Java技術棧" 原創,原創實屬不易,轉載、引用本文內容請註明出處,禁止抄襲、洗稿,請自重,尊重大家的勞動成果和智慧財產權,抄襲必究。
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2021最新版)
2.別在再滿屏的 if/ else 了,試試策略模式,真香!!
3.臥槽!Java 中的 xx ≠ null 是什麼新語法?
4.Spring Boot 2.5 重磅釋出,黑暗模式太炸了!
覺得不錯,別忘了隨手點贊+轉發哦!
- 有了 for (;;) 為什麼還需要 while (true) ? 到底哪個更快?
- 再見,Spring Security OAuth!!
- Spring Boot Vue Shiro 實現前後端分離、許可權控制
- Java 技術棧中介軟體優雅停機方案設計與實現全景圖
- Java 技術棧中介軟體優雅停機方案設計與實現全景圖
- JHipster:Java和JavaScript的全棧框架
- 面試官:Spring 註解 @After,@Around,@Before 的執行順序是?
- C 與Java“相愛相殺”:一個步步緊逼,一個節節敗退
- C 即將超越Java、360企業安全雲或將上線“一鍵強制下班”功能、Glibc增加面向Arm SVE優化的記憶體拷貝 ...
- 面向開發人員的映象和容器實踐指南
- 面試官:生成訂單 30 分鐘未支付,則自動取消,該怎麼實現?
- 臥槽!!IntelliJ IDEA 居然偷偷改程式碼。。
- 鑑權 5 兄弟:cookie、session、token、jwt、單點登入,終於有人說清楚了!
- 高逼格的 SQL 寫法:行行比較,別問為什麼,問就是逼格高。。
- 你見過最垃圾的程式碼長什麼樣?(來長長見識)
- 不捲了!技術團隊成員集體辭職
- 引爆全球的 Log4j2 核彈級漏洞,JNDI 到底是個什麼鬼?
- TIOBE 1月程式語言排行榜出爐:Python蟬聯冠軍,C和JAVA分列二三
- 再見,CentOS!2021/12/31 宣佈正式停服。。
- 基於 ElasticSearch 實現站內全文搜尋,寫得太好了!