新聞中心
?譯者 | 李睿

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


咨詢
建站咨詢
