再見,Spring Security OAuth??!
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
官宣新品
最近,Spring 官方又推出了《Spring Authorization Server》項(xiàng)目:

本次將 《Spring Authorization Server》項(xiàng)目正式上線,去掉了之前的體驗(yàn)狀態(tài),此舉恰逢 0.2.0 版本發(fā)布,這也是第一個(gè)正式支持的生產(chǎn)就緒版本。
項(xiàng)目前身
首先來看一則 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 項(xiàng)目用來支持授權(quán)服務(wù)器不是一個(gè)合適的選擇,因?yàn)槭跈?quán)服務(wù)器需要一個(gè)庫來進(jìn)行構(gòu)建,而 Spring Security 作為一個(gè)框架,不適合用來參與構(gòu)建庫或產(chǎn)品,市面上又有大量商業(yè)和開源授權(quán)服務(wù)器可以選擇,因此,Spring Security 團(tuán)隊(duì)決定不再提供對(duì)授權(quán)服務(wù)器的支持。。
另外,在 2018 年初,Spring 就宣布了 Spring Security OAuth 項(xiàng)目正式進(jìn)入維護(hù)模式,并且計(jì)劃在不久的將來會(huì)徹底停止支持。
我們進(jìn)入 Spring Security OAuth 項(xiàng)目主頁:
https://projects.spring.io/spring-security-oauth/docs/oauth2.html

可以看到棄用通知:
Spring Security OAuth 項(xiàng)目已經(jīng)被棄用了,最新的 OAuth 2.0 支持由 Spring Security 項(xiàng)目提供,有關(guān)更多詳細(xì)信息,請(qǐng)參閱 OAuth 2.0 遷移指南:
https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide

即使 Spring Security OAuth 項(xiàng)目被 Spring Security 項(xiàng)目接管了,但 Spring Security 依舊不再包含對(duì)授權(quán)服務(wù)器的支持,你可以用商用的、開源的,或者自己搭建,反正 Spring 不再提供了,純粹的只做框架了。。
項(xiàng)目背景
Spring 棄用授權(quán)服務(wù)器之后,社區(qū)、博客上的反饋、Gitter 中的討論和 GitHub 中的評(píng)論反響熱烈,一致強(qiáng)烈要求 Spring 提供對(duì)授權(quán)服務(wù)器的支持,Spring 估計(jì)也是頂不住壓力了,或者真的意識(shí)到 Spring 生態(tài)確實(shí)是需要授權(quán)服務(wù)器這玩意。。
于是在 2020/04/15 這天,Spring 團(tuán)隊(duì)又宣布新起《Spring Authorization Server》項(xiàng)目,以繼續(xù)提供對(duì) Spring 授權(quán)服務(wù)器的支持。
https://spring.io/blog/2020/04/15/announcing-the-spring-authorization-server

這是由 Spring Security 團(tuán)隊(duì)領(lǐng)導(dǎo)的社區(qū)驅(qū)動(dòng)項(xiàng)目,專注于為 Spring 社區(qū)提供授權(quán)服務(wù)器支持,該項(xiàng)目也開始替換了 Spring Security OAuth 提供的對(duì)于 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ù)棧長有時(shí)間會(huì)進(jìn)行詳細(xì)的理論+實(shí)戰(zhàn),關(guān)注公眾號(hào)Java技術(shù)棧,第一時(shí)間推送。
為什么需要授權(quán)服務(wù)器?
這個(gè)你需要了解下 OAuth2.0 協(xié)議,它定義了四個(gè)角色:
Client:客戶端,即請(qǐng)求授權(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 支持四種運(yùn)行模式:
授權(quán)碼模式 隱式授權(quán)模式 密碼模式 客戶端模式
但一般我們使用較多的還是授權(quán)碼模式。
授權(quán)碼模式運(yùn)行流程如下:

流程說明:
1、客戶端請(qǐng)求用戶給予授權(quán);
2、用戶同意給予客戶端授權(quán),并返回授權(quán)碼;
3、客戶端通過授權(quán)碼再向認(rèn)證服務(wù)器申請(qǐng)令牌;
4、認(rèn)證服務(wù)器對(duì)客戶端進(jìn)行認(rèn)證并返回令牌;
5、客戶端使用令牌向資源服務(wù)器獲取資源;
6、資源服務(wù)器驗(yàn)證令牌,并返回資源;
如流程所示,OAuth2 授權(quán)碼模式的運(yùn)行流程就少不了 Authorization Server(授權(quán)服務(wù)器),授權(quán)服務(wù)器用于授權(quán)認(rèn)證,以及對(duì) Access Token(令牌)的發(fā)放、管理、吊銷等。
授權(quán)服務(wù)器可以和資源服務(wù)器在不同的服務(wù)器,也可以是同一臺(tái)服務(wù)器。
總結(jié)
Spring 官方在 2020/04 才宣布搞《Spring Authorization Server》這個(gè)項(xiàng)目,才一年多時(shí)間就可以上線使用了,效率杠杠的啊,團(tuán)隊(duì)的目標(biāo)也很明確,就是要使《Spring Authorization Server》項(xiàng)目最終成為 Java 平臺(tái)上 OAuth 2 Authorization Server 事實(shí)上的標(biāo)準(zhǔn)框架。
好了,今天的分享就到這了,后面棧長還會(huì)陸續(xù)解讀更多的 Java 主流技術(shù),關(guān)注公眾號(hào)Java技術(shù)棧第一時(shí)間推送。另外,我也將 Spring 系列主流面試題和參考答案都整理好了,關(guān)注公眾號(hào)Java技術(shù)?;貜?fù)關(guān)鍵字 "面試" 進(jìn)行刷題。
最后,覺得我的文章對(duì)你用收獲的話,動(dòng)動(dòng)小手,給個(gè)在看、轉(zhuǎn)發(fā),原創(chuàng)不易,棧長需要你的鼓勵(lì)。
版權(quán)申明:本文系公眾號(hào) "Java技術(shù)棧" 原創(chuàng),原創(chuàng)實(shí)屬不易,轉(zhuǎn)載、引用本文內(nèi)容請(qǐng)注明出處,禁止抄襲、洗稿,請(qǐng)自重,尊重大家的勞動(dòng)成果和知識(shí)產(chǎn)權(quán),抄襲必究。






關(guān)注Java技術(shù)??锤喔韶?/strong>


