2011-05-13 215 views
30

我一直在成功使用Facebook Graph API(使用oauth 2.0進行身份驗證)。我現在需要編寫我自己的API,它允許開發人員以類似的方式連接到它。我已經看過各種圖書館,但我想要一些更精簡的東西,所以我決定推出自己的。看看我必須在Facebook上驗證用戶身份的代碼,它看起來相對簡單,但請糾正我,如果我走了軌道。爲我的API實現OAuth 2.0身份驗證

首先我需要提供一個消費者需要重定向到的安全頁面。例如https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL。用戶將驗證應用程序,然後我將重定向回查詢字符串中的oauth_token回調URL中提供的url。我想我可以在這裏爲oauth_token生成一個隨機的唯一字符串,並針對這個特定的消費者存儲它(編輯:請參閱下面的答案,這應該是每個消費者應用程序而不是用戶唯一的)。

這是第一步。我現在需要提供第二個安全頁面,用戶可以觸發Web請求。例如https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE。這將允許消費者將上面返回的oauth_token交換爲訪問令牌。我會再次簡單地生成一個隨機的唯一字符串並將其存儲在針對此特定消費者的用戶中。

現在我的API將接受access_token,以獲取試圖獲取特定於正在使用它的用戶的信息的方法。

我想知道我是否理解正確。如果是這種情況,OAuth 2.0規範看起來非常微不足道。另外爲什麼我們必須用access_token來交換oauth_token?我有我自己的想法,但我會很感激,如果有人可以幫助澄清這一點。

我真的很感激你的反饋,因爲我不想繼續前進,浪費數小時來完成這個工作,當它完全錯誤時。

感謝

回答

48

其實協議流程圖將是可視化的規格類似的OAuth 2的非常有益的,但也有隻有一些諧音的作品在那裏。由於我剛剛實現了僅客戶端OAuth 2庫,因此我可以驗證您是否在正確的軌道上。但這裏有一個問題:

oauth_token屬於您的客戶端應用程序(即桌面Facebook閱讀器),它可以驗證您的應用程序(就像ID一樣)。您提交此信息以獲取access_token,該access_token是特定於您的應用程序和登錄用戶的,它允許您訪問與用戶相關的受限資源。

下面是一個基本的桌面應用程序認證處理(摘自:http://developers.gigya.com/020_Developer_Guide/85_REST/OAuth2

REST OAuth 2.0

實際上與時間軸的流動雙字母組合(從頂部到底部,從採取:http://www.ibm.com/developerworks/web/library/wa-oauthsupport/?ca=drs-

Protocol flow

最後完整的程序是:(取自http://h2anetwork.org/ProjectDocs/DPI/DPI_Framework.html

OAuth protocol flow