寫在前面:根據OAuth 2.0 官方文檔,由兩個翻譯器翻譯後整理成人話,記錄下來。
OAuth 2.0 授權架構
概述
OAuth 2.0授權架構支援第三方應用程式以擷取對HTTP服務的有限通路,可以在通過編排審批互動來代表資源所有者在資源所有者和HTTP服務之間,或者通過允許代表第三方應用程式擷取通路權限。
介紹
在傳統的用戶端 - 伺服器身份驗證模型中,用戶端請求通路受限資源(受保護資源)通過使用資源所有者的資格證書。
為了讓第三方應用程式能夠通路受限資源,資源所有者與第三方應用程式共享資源所有者的憑據。這會産生一些問題和限制:
- 需要第三方應用程式來存儲資源所有者的憑證供将來使用,通常是密碼明文。
- 伺服器需要支援密碼身份驗證,盡管密碼有安全弱點。
- 第三方應用程式對資源所有者的資源通路能力過于廣泛(因為擁有資源所有者的密碼,和資源所有者的權限一樣了),使資源所有者沒有限制第三方應用程式持續時間或通路資源範圍。
- 資源所有者無法單個撤銷第三方的通路,而不用對所有第三方通路的進行撤銷,撤銷必須通過修改第三方的密碼方式進行。
- 任何第三方應用程式的受損,可能會導緻最終使用者的密碼和受其保護的所有資料受損。
OAuth通過引入授權層來解決這些問題将用戶端的角色與資源所有者的角色分離。在OAuth中,用戶端請求由資源所有者托管在資源伺服器上的受控資源,并且發行了一套與資源所有者不同的憑證。
而不是使用資源所有者的憑證來通路受保護的資源,用戶端獲得一個通路字元串令牌(字元串中記錄令牌的特定範圍、生存期限和其他通路屬性)。通路令牌由資源所有者準許頒發。用戶端使用通路令牌去通路由資源伺服器承載的受保護資源。
四個角色
- 資源所有者
能夠授予對受保護資源的通路權限的實體。當資源所有者是一個人時,它被稱之為最終使用者。
- 資源伺服器
托管受保護資源的伺服器,能夠接受并使用通路令牌響應受保護資源的資源請求。
- 用戶端
代表資源所有者授權發出對受保護資源請求的應用程式。術語“用戶端”并不意味着任何特定的實作特性(例如,應用程式是在伺服器、桌上型電腦還是在其他伺服器的裝置上執行)。
- 授權伺服器
資源所有者驗證成功後,獲得向用戶端頒發通路令牌的伺服器。
授權伺服器可以是與資源伺服器在相同的伺服器上,也可以是單獨的實體。單個授權伺服器可以向多個資源伺服器進行授權管理。
協定流程

抽象協定流程圖
抽象協定流程圖解釋
(A)用戶端請求資源所有者的授權。授權請求可以直接向資源所有者提出,或者最好間接通過授權伺服器作為中介。
(B)用戶端收到授予的授權,即代表資源所有者授權的憑證。使用下面定義的四種授予類型之一表示指定或者使用擴充授權類型。這個授權授予類型取決于請求授權的用戶端和授權伺服器。
(C)用戶端通過使用資源所有者授予的授權向授權伺服器申請通路令牌。
(D)授權伺服器驗證用戶端身份與資源所有者授予的授權,如果有效,則頒發通路令牌。
(E) 用戶端通過提供通路令牌進行身份驗證去資源伺服器請求受保護的資源。
(F)資源伺服器驗證通路令牌,如果有效,則滿足用戶端的服務請求。
OAuth 2.0 的核心思想是向第三方應用程式頒發通路令牌。
授權方法
OAuth 2.0 提供了四種授予用戶端通路令牌的方法:
- 授權碼
- 隐藏式
- 密碼式
- 用戶端憑證
授權碼的授權方式是最推薦的授權擷取通路令牌的方法。選擇哪種方法進行令牌授予需根據自己的需要去選擇适合的。
1. 授權碼(Authorization Code)
指的是第三方應用程式先向授權伺服器在資源所有者确認之後申請一個授權碼,然後在使用授權碼去資源伺服器申請一個通路令牌。
資源伺服器驗證通路令牌,如果有效,滿足請求。使用授權伺服器作為用戶端與資源所有者的中介,來授予授權代碼。而不是直接從資源所有者請求授權,将資源所有者定向到授權伺服器,授權伺服器反過來将資源所有者允許的授權代碼傳回給用戶端。
在使用授權代碼時。授權伺服器驗證資源所有者并獲得授權。因為資源所有者僅使用授權伺服器進行身份驗證,資源所有者的憑證從不與用戶端共享。
授權碼提供了一些重要的安全好處,例如驗證用戶端的能力,以及通過資源所有者的使用者代理将通路令牌直接傳輸到用戶端,将通路令牌暴露給其他人,包括資源所有者。
2. 隐藏式(Implicit)
隐藏式流程中是指允許直接向前端頒發令牌,而不是通過授權伺服器這個中介向用戶端發送授權碼,這種方式沒有了授權碼方式中的擷取授權的過程。用戶端直接擷取通路令牌。
隐藏式流程相對不安全,是以隐藏式的通路令牌的生命周期因該很短,如會話期間有效,關閉浏覽器後,通路令牌的生命周期也就結束了。
3. 密碼式(Resource Owner Password Credentials)
資源所有者的密碼憑證(即使用者名和密碼)可以直接用作授權授予以獲得通路權限令牌。憑證僅存在進階别信任度的資源所有者與用戶端之間(如,用戶端是裝置作業系統的一部分,或者是特權很高的用戶端申請)。
密碼式流程需要将使用者的使用者名密碼告訴用戶端,風險很大,無可奈何時才會使用,并且是高信任度的應用程式。
4.用戶端憑證(Client Credentials)
用戶端憑據(或其他形式的用戶端身份驗證)可以當授權範圍為僅限于受用戶端控制的受保護資源,或對先前經授權安排的受保護資源伺服器。
用戶端憑據用作授權授予通常當客戶代表自己行事時(客戶是也是資源所有者)或正在請求通路受保護的基于先前與授權伺服器。