官宣新品
最近,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
- Authorization 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 重磅發布,黑暗模式太炸了!
覺得不錯,別忘了隨手點贊+轉發哦!