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