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