什么是OAuth2.1?
經(jīng)過(guò)近些年網(wǎng)絡(luò)和設(shè)備的不斷發(fā)展,之前的oauth2.0發(fā)布的授權(quán)協(xié)議標(biāo)準(zhǔn)已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足現(xiàn)在的場(chǎng)景和需求,根據(jù)其安全最佳實(shí)踐,在oauth2.0的基礎(chǔ)上移除了一些不安全的授權(quán)方式,并且對(duì)擴(kuò)展協(xié)議進(jìn)行整合。該協(xié)議定義了一系列關(guān)于授權(quán)的開(kāi)放網(wǎng)絡(luò)標(biāo)準(zhǔn),允許用戶授權(quán)第三方應(yīng)用訪問(wèn)他們存儲(chǔ)在另外的服務(wù)提供者上的信息。現(xiàn)在各三方平臺(tái)提供的授權(quán)登錄基本都是基于oauth協(xié)議的,例如微信、QQ、GitHub和Gitee等平臺(tái)提供的授權(quán)登錄。而Spring Security的團(tuán)隊(duì)也在社區(qū)的推動(dòng)下推出了基于oauth2.1協(xié)議的授權(quán)框架:Spring Authorization Server。
什么是Spring Authorization Server?
Spring authorization server是由社區(qū)推動(dòng)的一個(gè)項(xiàng)目,在Spring security團(tuán)隊(duì)的領(lǐng)導(dǎo)下基于Nimbus庫(kù)重頭編寫,其目的主要是為 Spring 社區(qū)提供 OAuth 2.0 授權(quán)服務(wù)器支持,替代已被廢棄的Spring Security OAuth框架。Spring authorization server提供了OAuth 2.1和OpenID Connect 1.0規(guī)范以及其他相關(guān)規(guī)范的實(shí)現(xiàn)。
Spring Authorization Server根據(jù)oauth2.1規(guī)范實(shí)現(xiàn)的特性列表
在列出特性時(shí)也會(huì)根據(jù)特性說(shuō)明該特性對(duì)應(yīng)的oauth2.1規(guī)范。
認(rèn)證功能列表
角色解釋(摘抄自oauth2.1規(guī)范文檔 Roles)
- Resource Owner:資源擁有者;能夠授予對(duì)受保護(hù)資源的訪問(wèn)權(quán)限的實(shí)體,通常指的是終端用戶。
- Client:客戶端;代表資源所有者發(fā)出受保護(hù)資源請(qǐng)求并獲得其授權(quán)的應(yīng)用程序。
- Authorization Server:認(rèn)證服務(wù)器;服務(wù)器在成功對(duì)資源所有者進(jìn)行身份驗(yàn)證并獲得授權(quán)后向客戶端發(fā)出訪問(wèn)令牌。
- Resource Server:資源服務(wù)器;托管受保護(hù)資源的服務(wù)器,能夠使用訪問(wèn)令牌接受和響應(yīng)受保護(hù)的資源請(qǐng)求。
-
授權(quán)碼模式
授權(quán)碼模式(Authorization Code Grant)是功能最完整、流程最嚴(yán)密的授權(quán)模式。它的特點(diǎn)就是通過(guò)客戶端的后臺(tái)服務(wù)器,與"服務(wù)提供商"的認(rèn)證服務(wù)器進(jìn)行互動(dòng);流程如下
更詳細(xì)內(nèi)容請(qǐng)查看規(guī)范中關(guān)于授權(quán)碼模式的介紹.4.1. Authorization Code Grant
授權(quán)碼擴(kuò)展流程PKCE(Proof Key for Code Exchange)
使用授權(quán)碼授予的OAuth 2.0公共客戶端是易受授權(quán)碼攔截攻擊。該流程可以減輕攻擊,通過(guò)使用代碼交換證明密鑰來(lái)抵御威脅??蛻舳松蒫ode_verifier和code_challenge跟認(rèn)證服務(wù)器進(jìn)行交互,以生成的隨機(jī)認(rèn)證碼進(jìn)行身份認(rèn)證。
更詳細(xì)內(nèi)容請(qǐng)查看規(guī)范中關(guān)于PKCE的介紹. rfc7636 -
客戶端模式
客戶端模式(Client Credentials Grant)指客戶端以自己的名義,而不是以用戶的名義,向"服務(wù)提供商"進(jìn)行認(rèn)證。嚴(yán)格地說(shuō),客戶端模式并不屬于OAuth框架所要解決的問(wèn)題。在這種模式中,用戶直接向客戶端注冊(cè),客戶端以自己的名義要求"服務(wù)提供商"提供服務(wù),其實(shí)不存在授權(quán)問(wèn)題;流程如下
更詳細(xì)內(nèi)容請(qǐng)查看規(guī)范中關(guān)于客戶端模式的介紹.4.2. Client Credentials Grant
-
設(shè)備授權(quán)碼模式
設(shè)備授權(quán)碼模式(Device Authorization Grant)主要會(huì)出現(xiàn)在憑證式授權(quán)類型中,為設(shè)備代碼,設(shè)備流中無(wú)瀏覽器或輸入受限的設(shè)備提供的一種認(rèn)證方式,設(shè)備會(huì)讓用戶在另一臺(tái)設(shè)備上的瀏覽器中訪問(wèn)一個(gè)網(wǎng)頁(yè),以進(jìn)行登錄。 用戶登錄后,設(shè)備可以獲取所需的訪問(wèn)令牌和刷新令牌;流程如下
更詳細(xì)內(nèi)容請(qǐng)查看規(guī)范中關(guān)于設(shè)備授權(quán)碼模式的介紹.rfc8628
-
刷新access token
刷新令牌在獲取access token時(shí)會(huì)同步獲取刷新令牌(Refresh token),如果用戶訪問(wèn)的時(shí)候,客戶端的"訪問(wèn)令牌"已經(jīng)過(guò)期,則需要使用"更新令牌(Refresh token)"申請(qǐng)一個(gè)新的訪問(wèn)令牌。
注意:oauth2.1移除了隱式授權(quán)模式(Implicit grant)和密碼模式(Resource Owner Password Credentials Grant)。詳見(jiàn)oauth2.1規(guī)范中提到的“與oauth2.0的區(qū)別”和oauth2.0規(guī)范中對(duì)于“密碼模式”的描述:The resource owner password credentials grant MUST NOT be used.
Token生成
-
令牌生成器
框架提供了令牌生成器(OAuth2TokenGenerator),負(fù)責(zé)從提供的OAuth2TokenContext中根據(jù)TokenType類型生成對(duì)應(yīng)的OAuth2Token,tokenGenerator很靈活,它可以支持access_token和refresh_token的任何自定義令牌格式。
-
JWT RFC 7519
-
JWS RFC 7515
客戶端認(rèn)證方式
client_secret_basic
客戶端將clientId 和 clientSecret 通過(guò) ‘:’ 號(hào)拼接,并使用 Base64 進(jìn)行編碼得到一個(gè)字符串。將此編碼字符串放到請(qǐng)求頭(Authorization)去發(fā)送請(qǐng)求。授權(quán)服務(wù)器通過(guò)獲取請(qǐng)求頭中的clientId和clientSecret對(duì)客戶端進(jìn)行認(rèn)證。
client_secret_post
客戶端將 clientId 和 clientSecret 放到請(qǐng)求體(表單)去發(fā)送請(qǐng)求。授權(quán)服務(wù)器獲取請(qǐng)求參數(shù)中的clientId和clientSecret對(duì)客戶端進(jìn)行認(rèn)證。
client_secret_jwt
client_secret_jwt方式就是利用 JWT 進(jìn)行認(rèn)證。請(qǐng)求方和授權(quán)服務(wù)器,兩者都知道客戶端的 client_secret,通過(guò)相同的 HMAC 算法(對(duì)稱簽名算法)去加簽和驗(yàn)簽 JWT ,可以達(dá)到客戶端認(rèn)證的目的。請(qǐng)求方通過(guò)HMAC算法,以 client_secret 作為密鑰,將客戶端信息加簽生成 JWT;授權(quán)服務(wù)器使用相同的HMAC算法和client_secret,對(duì)請(qǐng)求方的 JWT 進(jìn)行驗(yàn)簽以認(rèn)證客戶端。
private_key_jwt
private_key_jwt 方式就是利用 JWT 進(jìn)行認(rèn)證;請(qǐng)求方擁有自己的公私鑰(密鑰對(duì)),使用私鑰對(duì) JWT 加簽,并將公鑰暴露給授權(quán)服務(wù)器;授權(quán)服務(wù)器通過(guò)請(qǐng)求方的公鑰驗(yàn)證 JWT,也能達(dá)到客戶端認(rèn)證的目的。請(qǐng)求方維護(hù)了一對(duì)公私鑰,通過(guò) RSA算法,使用私鑰將客戶端信息加簽生成 JWT;另外還通過(guò)接口暴露公鑰給授權(quán)服務(wù)器;授權(quán)服務(wù)器使用請(qǐng)求方的公鑰對(duì)請(qǐng)求方的 JWT進(jìn)行驗(yàn)簽以認(rèn)證客戶端。
none (public clients)
當(dāng)客戶端是公共客戶端時(shí)認(rèn)證服務(wù)器不會(huì)對(duì)客戶端進(jìn)行驗(yàn)證,PKCE(Proof Key for Code Exchange)流程要求客戶端為公共客戶端。
認(rèn)證服務(wù)器端點(diǎn)
包含OAuth2.1和Open Connect 1.0相關(guān)端點(diǎn),詳見(jiàn)官網(wǎng)對(duì)于端點(diǎn)的介紹文檔文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-667387.html
總結(jié)
本篇文章只是一個(gè)引子,很多地方說(shuō)的很簡(jiǎn)單,大概了解了一些關(guān)于spring Authorization Server和oauth協(xié)議的相關(guān)內(nèi)容,如果對(duì)某個(gè)點(diǎn)感興趣可以針對(duì)性的去讀一些相關(guān)的文章。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-667387.html
到了這里,關(guān)于Spring Authorization Server入門 (一) 初識(shí)SpringAuthorizationServer和OAuth2.1協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!