OAuth從1.0到2.1的發(fā)展之路

背景
2010年, OAuth 授權(quán)規(guī)范 1.0 (rfc 5849) 版本發(fā)布, 2年后, 更簡(jiǎn)單易用的 OAuth 2.0 規(guī)范發(fā)布(rfc 6749), 這也是大家最熟悉并且在互聯(lián)網(wǎng)上使用最廣泛的版本, 在2012年的時(shí)候, iPhone 5 是全新的, 微軟最新的瀏覽器還是 IE9, 單頁(yè)面應(yīng)用在當(dāng)時(shí)還被稱(chēng)作 "Ajax 應(yīng)用", CORS(跨域資源共享)還不是一個(gè)W3C標(biāo)準(zhǔn)。
到現(xiàn)在, 網(wǎng)絡(luò)和移動(dòng)領(lǐng)域發(fā)生了巨大的變化, 當(dāng)時(shí)發(fā)布的授權(quán)協(xié)議標(biāo)準(zhǔn)已經(jīng)遠(yuǎn)遠(yuǎn)不能滿(mǎn)足現(xiàn)在的場(chǎng)景和需求, 為了應(yīng)對(duì)這種不斷變化的局面, OAuth 社區(qū)多年來(lái)一直在修補(bǔ)和擴(kuò)展 OAuth 規(guī)范, OAuth 的格局也不斷擴(kuò)大, 越來(lái)越多的圍繞 OAuth 2.0 core 的擴(kuò)展授權(quán)規(guī)范出現(xiàn), 也讓 OAuth 2.0 整體看起來(lái)就像一個(gè)迷宮一樣。

不斷進(jìn)化的 OAuth 2.0
在 OAuth 2.0 核心規(guī)范 (RFC 6749)中, 定義了四種授權(quán)類(lèi)型:授權(quán)碼、隱式、密碼和客戶(hù)端憑據(jù), 如下:

相信大家都很熟悉, 在 OAuth 2.0 中,最安全也是使用最普遍的就是授權(quán)碼模式, 而對(duì)于本地應(yīng)用,移動(dòng)應(yīng)用來(lái)說(shuō), 通常會(huì)使用隱式和密碼授權(quán), 這兩種本身就是不安全的, 因?yàn)檫@些屬于公開(kāi)的客戶(hù)端, 本身沒(méi)有能力保護(hù)客戶(hù)端機(jī)密, 但是當(dāng)時(shí)并沒(méi)有其它好的方案。
為了解決 OAuth 2.0 對(duì)公開(kāi)客戶(hù)端的授權(quán)安全問(wèn)題, PKCE (RFC 6379)協(xié)議應(yīng)運(yùn)而生, 全稱(chēng)是 Proof Key for Code Exchange,PKCE 的原理是, 對(duì)于公共的客戶(hù)端, 如果不能使用客戶(hù)端秘鑰(client_secret), 那客戶(hù)端就提供一個(gè)自創(chuàng)建的證明 (code_verifier) 給授權(quán)服務(wù)器,其中使用了加密算法, 授權(quán)服務(wù)器通過(guò)它來(lái)驗(yàn)證客戶(hù)端。

后來(lái),"OAuth 2.0 for Native Apps"(RFC 8252)規(guī)范發(fā)布,推薦原生應(yīng)用也使用授權(quán)碼 + PKCE。

隨著技術(shù)不斷地發(fā)展, 出現(xiàn)了設(shè)備授權(quán)的場(chǎng)景, 這里設(shè)備指智能電視,打印機(jī)等, 和傳統(tǒng)的PC或者手機(jī)不同, 這種設(shè)備是缺少瀏覽器或者鍵盤(pán)的,那 OAuth 2.0 常規(guī)的授權(quán)模式肯定是不能滿(mǎn)足的, 于是就出現(xiàn)了設(shè)備授權(quán)(Device Grant) 。

在 OAuth 2.0 安全最佳實(shí)踐(Security BCP)中, 棄用了隱式和密碼授權(quán),并且推薦所有的客戶(hù)端都應(yīng)該使用 Authorization Code + PKCE 的組合。

最終, 調(diào)整后的 OAuth 授權(quán)模式會(huì)更加精簡(jiǎn), 轉(zhuǎn)換成下面三種, 這也是 OAuth 2.1 的思想, 參考安全最佳實(shí)踐(BCP),取其精華, 去其糟粕。

總結(jié)
歸根結(jié)底, OAuth 2.1 并不是要推翻 OAuth 2.0,而是根據(jù)其安全最佳實(shí)踐(BCP), 移除不安全的授權(quán)流程, 并且對(duì)擴(kuò)展協(xié)議進(jìn)行整合, 讓原本復(fù)雜如迷宮的 OAuth 2.0 規(guī)范成為更易用,更安全的授權(quán)規(guī)范。

參考資料
The OAuth 1.0 Protocol
The OAuth 2.0 Authorization Framework
The OAuth 2.1 Authorization Framework draft-ietf-oauth-v2-1-04
OAuth 2.0 for Native Apps
OAuth 2.0 Device Authorization Grant
Proof Key for Code Exchange by OAuth Public Clients
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
合成大西瓜開(kāi)發(fā)源碼手把手教你運(yùn)行和部署大西瓜游戲項(xiàng)目(附源碼)
這篇文章主要介紹了合成大西瓜開(kāi)發(fā)源碼手把手教你運(yùn)行和部署大西瓜游戲項(xiàng)目(附源碼),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
Git配置用戶(hù)簽名方式的拓展示例實(shí)現(xiàn)全面講解
這篇文章主要為大家介紹了Git配置用戶(hù)簽名方式的拓展示例實(shí)現(xiàn)全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
深入解析HetuEngine實(shí)現(xiàn)On Yarn原理
這篇文章主要介紹了HetuEngine實(shí)現(xiàn)On Yarn原理,介紹了HetuEngine On Yarn的原理,其實(shí)現(xiàn)主要是借助了Yarn Service提供的能力,感興趣的朋友一起通過(guò)本文學(xué)習(xí)下2022-01-01
用asp與php實(shí)現(xiàn)百度ping服務(wù)的代碼
分別用asp與php實(shí)現(xiàn)百度ping服務(wù)的代碼,需要的朋友可以參考下2012-02-02
玩轉(zhuǎn)markdown 分享幾個(gè)需要用到的工具
markdown是一個(gè)面向?qū)懽鞯恼Z(yǔ)法引擎,markdown的最終目的都是解析成html用于網(wǎng)頁(yè)瀏覽,所以它兼容html語(yǔ)法,即你可以在 markdown文檔中使用原生的html標(biāo)簽2016-08-08
Matlab使用Plot函數(shù)實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)顯示方法總結(jié)
這篇文章主要介紹了Matlab使用Plot函數(shù)實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)顯示方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

