[OAuth]瞭解OAuth

  • 424
  • 0
  • 2016-03-05

OAuth是一個授權機制,用來讓人們授權給第三方程式存取自己在網路上的資源,例如照片、影片、個人資訊等。

[OAuth]瞭解OAuth

OAuth是一個授權機制,用來讓人們授權給第三方程式存取自己在網路上的資源,例如照片、影片、個人資訊等。

OAuth的使用情境

如果王小明想要使用一個線上洗照片的服務-雲沖印,讓雲沖印可以讀取王小明的Facebook中的照片檔,下載照片並且沖洗。看到這裡,應該就會有些問題。雲沖印的服務要怎麼讀取王小明的照片,給它帳號密碼嗎?這樣不方便也不安全,因為王小明只想給它讀取照片的權限,而不是讀取所有資源的權限。而且如果之後王小明換了密碼,這個服務就無法運作了。

使用OAuth

這時候,OAuth的機制就派上用場了。只要Facebook有實作OAuth的機制,就會有以下的流程:

  1. 當王小明(Resource Owner)一開始使用雲沖印服務(Client)時
  2. 雲沖印就可以將網頁導引至Facebook(Authorization Server)中。
  3. Facebook會負責詢問王小明是否願意授與該第三方服務讀取照片的權限。
  4. 如果允許的話,那麼Facebook就會發送Access Token給雲沖印服務。
  5. 之後,雲沖印服務就可以憑Access Token到Facebook(Resource Server)中讀取王小明的照片(Protected Resource)。即使王小明換了密碼,也不會影響線雲沖印服務的功能。

OAuth把這些程序及互動的角色都抽象化成了一套標準,因此,就會有以下的術語出現。因為這個定義很嚴謹,已經有人解釋得很好,請參考: OAuth 2.0 筆記 (1) 世界觀

所以,這裡只把術語對應的角色列出來。

  • Protected Resource:照片
  • Client:雲沖印
  • Resource Owner:王小明
  • Resource Server: Facebook
  • Authorization Server: 也是Facebook

OAuth的作用

OAuth的作用,是在雲沖印與Facebook之間,插入一個授權層(authorization layer)。這個授權層讓Facebook不需要王小明的帳號密碼就可以讓雲沖印存取王小明的照片,只需王小明同意雲沖印的要求,讓Facebook發出一張票(Access Token)雲沖印,之後雲沖印就憑那張票進入Facebook存取王小明的照片。這張票,就跟車票一樣,是可以進入Facebook取照片的憑證。剪票口認票不認人,只要有票就可以存取照片。當然,就跟車票有分一日票及月票一樣,可以設定不同的期限。

OAuth實際的運作流程

Spec定義了四種授權流程,分別是:

  • Authorization Code
  • Implicit
  • Resource Owner Password Credentials
  • Client Credentials

通常各大網站都有支援Authorization Code的授權流程,所以瞭解Authorization Code的流程就足夠應付大部分的OAuth需求了。

上圖是來自於Yu-Cheng Chuang-簡單易懂的 OAuth 2.0的投影片,詳細描述了整個的運作流程。詳細的說明,可以參考 Yu-Cheng Chuang - OAuth 2.0 筆記 (4.1) Authorization Code Grant Flow 細節


參考