何謂OAuth?依照其官網的定義:
『An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications』
當我們要使用網路上提供的服務時,正常的做法的話,會需要使用者的帳號密碼來做登入的動作才能執行((如Facebook上的各種小遊戲及應用程式需要取得你在facebook上的朋友)。可是,我們並不能保證每個網路上的服務都是正常的,如果是釣魚網站的話該怎麼辦?當我們越頻繁的去傳送這組帳密給不同的服務使用時,就代表使用者帳號被惡意使用的風險越高。--而取得帳號密碼的服務,可以為所欲為的進行任何的事,例如改變使用者密碼。如果這組帳密同樣用在如網路銀行等對使用者而言非常重要的網站的話,那麼後果更是不可設想。
我們所需要的,是讓各種不同的third-party的服務有限度的存取他們所需要的資源。
OAuth的導入,便是為了解決這個問題。
不同於Client-Server的架構,client任何資源的請求都是利用他自己的credentials直接跟server存取。在OAuth裡,其導入了resource owner,將client對資源存取的權限抽離出來。--意即client端想對Server進任何資源的存取,都需要先向resource owner請求permission,例如:在facebook中常常會跳出請求授權的畫面,如下:
這個permission會是以token的形式展現,就像是一個臨時通行證明,可以允許第third-party的服務進行被授權的操作(也可以限制可以操作的時間)。
以下是這三個角色職責的整理:
resource owner :位於電腦前面的使用者
server:網路上所提供的服務,如facebook
client:任何安裝在使用者電腦中,要跟server請求服務的應用程式,如facebook中的小遊戲,必須要跟resource owner請求授權後才能夠跟server要求如取得玩家朋友列表之類的要求。
在OAuth中,有三種不同的credential:
client credentials:同consumer key and secret,用來認證client,讓server能夠收集使用其服務的client資訊,並向resource owner提供有關於該client想要存取哪些protected resource的資訊。
token credentials:同access token and secret,用來取代resource owner的帳號密碼。client藉由跟resource owner請求授權後,server便會發行這個credential給client,之後client就可以藉由這個token去存取protected resource。這個token是以public/private key的機制來運行,通常會限制其能存取的resource及使用時間(如2小時)
temporary credentials:同request token and secret,用來確定access token是來自於被授權的client,是產生acces token前暫時性的存在。這個token可以讓我們在各種不同的client(web-based, desktop, mobile,etc.)之間的處理增加了不少的彈性及安全性。也就是說,我們可以透過n-Legged(即1個以上的client的delegate)去存取protected resource。
會有不同的名子,是為了在參數名稱上能夠向後相容。
以下的流程圖,便是在展示這三個token是怎麼運行:
參考:
Open Authorization:
http://coding.anyun.idv.tw/2012/03/13/oauth-2/
http://www.ibm.com/developerworks/web/library/wa-oauthsupport/index.html
Leave a Reply