再見,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

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 重磅發佈,黑暗模式太炸了!

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

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