2013-12-12 42 views
2

我想爲我的API實現OAuth 2.0。我使用第三方庫作爲基本OAuth提供者,django-oauth2-provider, 和Tastypie作爲框架。這些細節不應該太重要。 OAuth 2.0的作品 - 創建用戶時,會創建管理用戶的secret_key及其id的OAuth 2客戶端 。然後,客戶可以提供他們從用戶創建端點 獲得的用戶ID以及他們的用戶名和密碼,以獲取允許他們使用API​​端點的訪問令牌。 id(必須傳遞給訪問令牌的請求)。顯然,當第一次創建用戶時 我可以用HTTP響應返回client_id。然而,在那之後,顯然會出現這樣的情況,用戶沒有在本地存儲他們的客戶端ID( )(這是一個傳統的用戶/應用程序設置,而不是像客戶端ID始終可見的Google API那樣)。我想用OAuth保護 GET請求到客戶資源,但這意味着我無法查詢給定用戶的客戶端ID的API。而且,似乎OAuth的整個點 被擊敗,如果我總是可以通過用戶名和密碼從某個oauth端點檢索我的客戶端ID。我在想這個錯嗎?OAuth 2.0客戶端ID在Django/tastypie實施

另外,通過閱讀OAuth規範,我的印象是客戶端ID和客戶端祕密都是應該提供的用於獲取訪問令牌的應用。然而,我使用的實現默認強制用戶提供客戶端ID,客戶端密碼,用戶名和密碼。我已經覆蓋了實現,只需要客戶端ID和密碼,但我想確保這是正確的調用,我不會錯過任何東西。

編輯爲flup的迴應:

我處理一個Django API作爲資源服務器,以及一個iPhone應用程序的用戶作爲資源所有者。 iPhone應用程序與服務器直接相關 - 換句話說,這裏沒有第三方參與,也沒有計劃將來涉及他們;所有軟件都是我們的。我認爲在這種情況下密碼流將是我所需要的。事實上,這似乎是django-oauth2-provider默認提供的。我想保持與他們正在做的事情不一定要完全重新發明輪子一致。

+0

您寫道:「管理用戶的secret_key並創建其id的OAuth 2客戶端」。隨着OAuth 2,不再有客戶機密。你想使用哪個版本的OAuth?在最後一段中,您還寫道「通過閱讀OAuth規範,我的印象是客戶端ID和客戶端祕密...」,但在OAuth 2中,沒有客戶端祕密(我知道,我重複自己)。我有點困惑,你想要什麼。 –

+0

@FabianParzefall oauth2授權授權流程確實使用客戶端密鑰,隱式流程沒有 – flup

回答

0

oauth2的目標是讓資源所有者爲客戶提供一個代客鑰匙,授權客戶代表他訪問服務器上的某些資源。

如果沒有第三方參與,則沒有客戶端可以授權,也不需要使用oauth2。可以使用standard authentication mechanisms present in tastypie

+0

我已經寫下了一些基礎知識,能否更新您的問題,說明客戶端是什麼以及您希望實現哪個流程? – flup

+0

當然,只是更新了它 – user1427661

+0

你寫道,每個用戶都有一個客戶端是一種誤解。但是,如果您查看django-oauth2-provider代碼,則每個客戶端(與訪問鍵關聯)都屬於單個用戶:https:// github。com/caffeinehit/django-oauth2-provider/blob/master/provider/oauth2/models.py(檢查客戶端類)。 – user1427661

相關問題