2016年8月17日 星期三

OAuth 和 Facebook 登入原理

OpenID:用作「身份認證」,如果某網站支援 OpenID,你登入其他網站不需要記憶密碼,只要拿你的 OpenID 登入就好。

OAuth:用作「授權」,舉例而言,如果你需要授權某相片列印公司的網站取得你在 Facebook 的相片,只要該相片列印公司支援 OAuth,你也授權,那該公司就可以取得你在 Facebook 的相片。

OAuth有分1.0和2.0,只討論比較新的2.0

首先,分四個角色

  • 資源擁有者 (Resource Owner): 擁有 Facebook 帳號的用戶 ( 用戶甲 )。
  • 授權伺服器 (Authorization Server): kkbox向 facebook 取得使用者授權的伺服器
  • 資源伺服器 (Resource Server): 保管用戶甲 facebook 資料的 server
  • 用戶端 (Client): 想要取得用戶甲 facebook 資料的 kkbox


整體的流程是:


首先,kkbox在 facebook 有一個應用程式。

有一天,用戶甲到 kkbox 網站想聽音樂, kkbox 必須要取得用戶甲的 facebook 帳號授權,才可以取得用戶甲在 facebook 的資料。

因此  kkbox 把用戶甲重新導向到 facebook,用戶甲必須向 facebook 說明「我授權給  kkbox 」,之後 facebook 會告訴  kkbox 的網站「我已經取得用戶甲的授權了」,證明的方法是發送一個授權token給  kkbox 的網站。

但這時  kkbox 不能確定這個授權token真的是 facebook 給的,因此  kkbox 必須要把這個token送回給 facebook,讓 facebook 告訴  kkbox 這個授權是真的,如果是真的,facebook 會交給  kkbox 一串「access_token」,這個東西就是萬能的鑰匙!  kkbox 公司用這個就可以向 facebook 取得所有用戶甲授權的資料了!



0 意見:

張貼留言