再見,Spring Security OAuth!!

語言: CN / TW / HK

官宣新品

最近,Spring 官方又推出了《Spring Authorization Server》專案:

本次將 《Spring Authorization Server》專案正式上線,去掉了之前的體驗狀態,此舉恰逢 0.2.0 版本釋出,這也是第一個正式支援的生產就緒版本。

專案前身

首先來看一則 2019 年 的 Spring Security OAuth 2.0 路線更新圖說明:

Spring Security OAuth 2.0 Roadmap Update

http://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 專案主頁:

http://projects.spring.io/spring-security-oauth/docs/oauth2.html

可以看到棄用通知:

Spring Security OAuth 專案已經被棄用了,最新的 OAuth 2.0 支援由 Spring Security 專案提供,有關更多詳細資訊,請參閱 OAuth 2.0 遷移指南:

http://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 授權伺服器的支援。

http://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 重磅釋出,黑暗模式太炸了!

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!