再見,Spring Security OAuth?。?/h1>
官宣新品
最近,Spring 官方又推出了《Spring Authorization Server》項目:
本次將 《Spring Authorization Server》項目正式上線,去掉了之前的體驗狀態(tài),此舉恰逢 0.2.0 版本發(fā)布,這也是第一個正式支持的生產(chǎn)就緒版本。
項目前身
首先來看一則 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 項目用來支持授權(quán)服務(wù)器不是一個合適的選擇,因為授權(quán)服務(wù)器需要一個庫來進(jìn)行構(gòu)建,而 Spring Security 作為一個框架,不適合用來參與構(gòu)建庫或產(chǎn)品,市面上又有大量商業(yè)和開源授權(quán)服務(wù)器可以選擇,因此,Spring Security 團(tuán)隊決定不再提供對授權(quán)服務(wù)器的支持。。
另外,在 2018 年初,Spring 就宣布了 Spring Security OAuth 項目正式進(jìn)入維護(hù)模式,并且計劃在不久的將來會徹底停止支持。
我們進(jìn)入 Spring Security OAuth 項目主頁:
https://projects.spring.io/spring-security-oauth/docs/oauth2.html
可以看到棄用通知:
Spring Security OAuth 項目已經(jīng)被棄用了,最新的 OAuth 2.0 支持由 Spring Security 項目提供,有關(guān)更多詳細(xì)信息,請參閱 OAuth 2.0 遷移指南:
https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide
即使 Spring Security OAuth 項目被 Spring Security 項目接管了,但 Spring Security 依舊不再包含對授權(quán)服務(wù)器的支持,你可以用商用的、開源的,或者自己搭建,反正 Spring 不再提供了,純粹的只做框架了。。
項目背景
Spring 棄用授權(quán)服務(wù)器之后,社區(qū)、博客上的反饋、Gitter 中的討論和 GitHub 中的評論反響熱烈,一致強烈要求 Spring 提供對授權(quán)服務(wù)器的支持,Spring 估計也是頂不住壓力了,或者真的意識到 Spring 生態(tài)確實是需要授權(quán)服務(wù)器這玩意。。
于是在 2020/04/15 這天,Spring 團(tuán)隊又宣布新起《Spring Authorization Server》項目,以繼續(xù)提供對 Spring 授權(quán)服務(wù)器的支持。
https://spring.io/blog/2020/04/15/announcing-the-spring-authorization-server
這是由 Spring Security 團(tuán)隊領(lǐng)導(dǎo)的社區(qū)驅(qū)動項目,專注于為 Spring 社區(qū)提供授權(quán)服務(wù)器支持,該項目也開始替換了 Spring Security OAuth 提供的對于 Authorization Server 的支持。
完整功能列表:
- The OAuth 2.0 Authorization Framework
    
- Authorization Code Grant
 - HTTP Basic
 - HTTP POST
 - Authorization Code
 - Client Credentials
 - Refresh Token
 - Authorization Grant
 - Client Authentication
 - User Consent
 
 - 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
 
這部分這里就不展開介紹了,后續(xù)棧長有時間會進(jìn)行詳細(xì)的理論+實戰(zhàn),關(guān)注公眾號Java技術(shù)棧,第一時間推送。
為什么需要授權(quán)服務(wù)器?
這個你需要了解下 OAuth2.0 協(xié)議,它定義了四個角色:
- Client:客戶端,即請求授權(quán)用戶資源的第三方應(yīng)用程序;
 - Resource Owner:資源所有者,授權(quán) Client 訪問其帳戶的用戶;
 - Authorization server: 授權(quán)服務(wù)器,即服務(wù)商用于處理用戶授權(quán)認(rèn)證的服務(wù)器;
 - Resource server:資源服務(wù)器,即服務(wù)商提供用戶受保護(hù)資源的服務(wù)器;
 
另外,OAuth2.0 支持四種運行模式:
- 授權(quán)碼模式
 - 隱式授權(quán)模式
 - 密碼模式
 - 客戶端模式
 
但一般我們使用較多的還是授權(quán)碼模式。
授權(quán)碼模式運行流程如下:
流程說明:
1、客戶端請求用戶給予授權(quán);
2、用戶同意給予客戶端授權(quán),并返回授權(quán)碼;
3、客戶端通過授權(quán)碼再向認(rèn)證服務(wù)器申請令牌;
4、認(rèn)證服務(wù)器對客戶端進(jìn)行認(rèn)證并返回令牌;
5、客戶端使用令牌向資源服務(wù)器獲取資源;
6、資源服務(wù)器驗證令牌,并返回資源;
如流程所示,OAuth2 授權(quán)碼模式的運行流程就少不了 Authorization Server(授權(quán)服務(wù)器),授權(quán)服務(wù)器用于授權(quán)認(rèn)證,以及對 Access Token(令牌)的發(fā)放、管理、吊銷等。
授權(quán)服務(wù)器可以和資源服務(wù)器在不同的服務(wù)器,也可以是同一臺服務(wù)器。
總結(jié)
Spring 官方在 2020/04 才宣布搞《Spring Authorization Server》這個項目,才一年多時間就可以上線使用了,效率杠杠的啊,團(tuán)隊的目標(biāo)也很明確,就是要使《Spring Authorization Server》項目最終成為 Java 平臺上 OAuth 2 Authorization Server 事實上的標(biāo)準(zhǔn)框架。





















 
 
 












 
 
 
 