如何理解授權(quán)框架OAuth?2.0
譯文?譯者 | 李睿
審校 | 孫淑娟
在傳統(tǒng)的客戶(hù)端-服務(wù)器身份驗(yàn)證模型中,資源所有者與客戶(hù)端共享其憑據(jù),以便客戶(hù)端可以在必要時(shí)訪問(wèn)其資源。客戶(hù)端通過(guò)將資源所有者的憑據(jù)傳遞給資源服務(wù)器來(lái)做到這一點(diǎn),并且資源服務(wù)器在提供對(duì)受保護(hù)資源的訪問(wèn)之前對(duì)其進(jìn)行驗(yàn)證。這似乎很簡(jiǎn)單,對(duì)吧?
但這個(gè)模型有很多問(wèn)題,下面列出了其中一些問(wèn)題:
- 客戶(hù)端需要存儲(chǔ)資源所有者的憑據(jù)以備將來(lái)使用。
- 如果資源所有者有多個(gè)客戶(hù)端,則需要將相同的憑據(jù)分發(fā)給所有客戶(hù)端。
- 資源所有者不能輕易撤消一個(gè)客戶(hù)端的訪問(wèn)權(quán)限,因?yàn)樗鼘⒁笃渌锌蛻?hù)端使用資源所有者的新憑據(jù)來(lái)更新其數(shù)據(jù)庫(kù)。
- 如果一個(gè)客戶(hù)端的數(shù)據(jù)庫(kù)被泄露(因此資源所有者的憑據(jù)丟失),它會(huì)影響所有客戶(hù)端。
- 沒(méi)有簡(jiǎn)單的方法將客戶(hù)端限制為資源所有者的一個(gè)資源子集,從而給他們提供過(guò)于廣泛的訪問(wèn)權(quán)限。
OAuth 2.0框架通過(guò)引入一個(gè)授權(quán)層來(lái)解決這些問(wèn)題,該層消除了客戶(hù)端與資源所有者擁有相同憑據(jù)的需要,而是允許他們使用訪問(wèn)令牌訪問(wèn)資源所有者的資源。
例如,最終用戶(hù)(資源所有者)可以授予文檔打印服務(wù)(客戶(hù)端)訪問(wèn)其存儲(chǔ)在文檔服務(wù)器(資源服務(wù)器)中的文檔(資源)的權(quán)限,而無(wú)需與文檔打印服務(wù)共享其憑據(jù)。最終用戶(hù)無(wú)需共享他們的憑據(jù),而是可以通過(guò)與同樣受文檔打印服務(wù)信任的另一方(授權(quán)服務(wù)器)確認(rèn)來(lái)批準(zhǔn)客戶(hù)端的文檔訪問(wèn)請(qǐng)求。作為回報(bào),授權(quán)服務(wù)器與文檔打印服務(wù)共享訪問(wèn)令牌,以訪問(wèn)文檔服務(wù)器中的最終用戶(hù)文檔。
OAuth角色
(1)資源所有者——擁有資源的實(shí)體。它能夠授予對(duì)資源的訪問(wèn)權(quán)限。
(2)資源服務(wù)器——托管受保護(hù)資源的實(shí)體。它能夠拒絕或允許訪問(wèn)資源所有者的受保護(hù)資源。
(3)客戶(hù)——尋求訪問(wèn)(并作用于)受保護(hù)資源的實(shí)體。
(4)授權(quán)服務(wù)器-協(xié)調(diào)認(rèn)證和授權(quán)的實(shí)體。
協(xié)議流
A.客戶(hù)請(qǐng)求資源所有者授予對(duì)各種資源的訪問(wèn)權(quán)限。客戶(hù)端或者直接向資源所有者詢(xún)問(wèn)(如上所示),或者使用授權(quán)服務(wù)器作為中介。
B.資源所有者通過(guò)返回稱(chēng)為授權(quán)許可的內(nèi)容來(lái)響應(yīng)。資源可以選擇使用四種不同的授權(quán)許可類(lèi)型之一或擴(kuò)展授權(quán)類(lèi)型進(jìn)行響應(yīng)。
C.然后使用這一授權(quán)向授權(quán)服務(wù)器請(qǐng)求訪問(wèn)令牌。
D.授權(quán)服務(wù)器驗(yàn)證授權(quán),如果有效,則使用訪問(wèn)令牌(以及可選的刷新令牌)進(jìn)行響應(yīng)。
E.客戶(hù)端使用這一訪問(wèn)令牌向資源服務(wù)器請(qǐng)求資源。
F.資源服務(wù)器驗(yàn)證令牌,如果有效,則為請(qǐng)求提供服務(wù)。
授權(quán)許可
這是一個(gè)憑據(jù),表示提供給客戶(hù)端訪問(wèn)其受保護(hù)資源的資源所有者的授權(quán)。如前所述,這與授權(quán)服務(wù)器共享以獲取訪問(wèn)令牌作為交換。有四種授權(quán)許可類(lèi)型:
(1)授權(quán)碼
授權(quán)服務(wù)器是客戶(hù)端和資源所有者之間的中介。客戶(hù)端不會(huì)直接從資源所有者那里尋求授權(quán),而是將資源所有者重定向到授權(quán)服務(wù)器,在此對(duì)資源所有者進(jìn)行身份驗(yàn)證。在成功驗(yàn)證之后,資源所有者將與授權(quán)碼一起重定向到客戶(hù)端。
這種授權(quán)類(lèi)型有一些優(yōu)點(diǎn)。
- 資源所有者的憑據(jù)永遠(yuǎn)不會(huì)與客戶(hù)端共享,因?yàn)橘Y源所有者由授權(quán)服務(wù)器進(jìn)行身份驗(yàn)證。
- 訪問(wèn)令牌直接傳輸給客戶(hù)端,無(wú)需通過(guò)任何一方,包括資源所有者。
(2)隱式授權(quán)
在這種授權(quán)類(lèi)型中,沒(méi)有像授權(quán)碼這樣的中間憑據(jù)。這意味著,一旦資源所有者通過(guò)授權(quán)服務(wù)器的身份驗(yàn)證,訪問(wèn)令牌就會(huì)立即可供客戶(hù)端使用。這肯定比授權(quán)碼授予類(lèi)型快,但具有安全隱患(例如可能將訪問(wèn)令牌暴露給資源所有者或其他有權(quán)訪問(wèn)資源所有者的用戶(hù)代理的應(yīng)用程序)。當(dāng)授權(quán)的授權(quán)類(lèi)型可用時(shí),不建議使用此授權(quán)類(lèi)型。
(3)資源所有者密碼憑據(jù)
在這種授權(quán)類(lèi)型中,客戶(hù)端使用資源所有者的憑據(jù)來(lái)獲取第一次的訪問(wèn)令牌。一旦訪問(wèn)令牌可用于后續(xù)資源請(qǐng)求,就使用訪問(wèn)令牌。這消除了在客戶(hù)端存儲(chǔ)資源所有者憑據(jù)的需要。這在資源所有者與客戶(hù)端有信任關(guān)系的情況下很有用。當(dāng)授權(quán)的授權(quán)類(lèi)型可用時(shí),不建議使用此授權(quán)類(lèi)型。
(4)客戶(hù)憑據(jù)
這種授權(quán)類(lèi)型用于客戶(hù)端控制資源或他們也是資源所有者的情況。在這種情況下,客戶(hù)端的憑據(jù)(預(yù)先與授權(quán)服務(wù)器共享)被用作授權(quán)授予來(lái)獲取訪問(wèn)令牌。
還有一種擴(kuò)展授權(quán)類(lèi)型,它是一種可擴(kuò)展機(jī)制,可以創(chuàng)建更多授權(quán)類(lèi)型。它超出了本文的范圍。
訪問(wèn)令牌
訪問(wèn)令牌是用于訪問(wèn)由資源服務(wù)器托管的資源所有者的受保護(hù)資源的憑據(jù)。它是一個(gè)簡(jiǎn)單的字符串,包含安全且可驗(yàn)證的關(guān)鍵授權(quán)信息。這還包含所請(qǐng)求資源的范圍和訪問(wèn)時(shí)間,這可以由資源服務(wù)器或授權(quán)服務(wù)器強(qiáng)制執(zhí)行。在通常情況下,這些令牌是經(jīng)過(guò)簽名的,這也有助于資源服務(wù)器驗(yàn)證客戶(hù)端的身份。
對(duì)于每個(gè)資源請(qǐng)求,訪問(wèn)令牌與其他請(qǐng)求屬性一起發(fā)送到資源服務(wù)器。這一令牌的結(jié)構(gòu)是特定于實(shí)現(xiàn)的,不受OAuth 2.0規(guī)范的規(guī)定。
刷新令牌
這是另一個(gè)憑據(jù),當(dāng)目前的訪問(wèn)令牌過(guò)期或無(wú)效時(shí),客戶(hù)端使用該憑據(jù)從授權(quán)服務(wù)器獲取訪問(wèn)令牌。授權(quán)服務(wù)器可以自行決定是否發(fā)出刷新令牌。
OAuth 2.0是一個(gè)極其豐富的授權(quán)框架,在當(dāng)今市場(chǎng)上有多種實(shí)現(xiàn)。它已被證明是安全的,并且經(jīng)受住了時(shí)間的考驗(yàn),這從最近在許多組織中的采用中可以看出。在未來(lái)的教程中,將通過(guò)一些工作示例深入研究這一框架。
原文標(biāo)題:??Understanding OAuth 2.0???,作者:Santanu Baruah?