2013-08-19 131 views
2

我們開發了兩個應用程序使用的REST API:一個在Android上運行,另一個在iOS上運行。該API不公開 - 我們在內部構建了應用程序。OAuth - 每個消費者平臺的不同消費者密鑰

爲每個不同的平臺提供不同的消費者密鑰是否有意義(例如:智能手機上的iOS,iOS上的iOS上的一種,智能手機上的Android上的一種)?

有幾個鍵的一個優勢是能夠輕鬆地進行設備分段分析(但是,可以用其他方式完成)。

兩個策略之一的任何優點?

有什麼優點和缺點?

謝謝。

回答

3

在OAuth環境中,任何在最終用戶設備(包括iOS和Android設備)上運行的應用程序都被稱爲「公共」客戶端,因爲密鑰隨應用程序一起分發。

這與服務器端Web應用程序相反,其中密鑰可以安全地保密。只有經過許可的開發人員和操作人員才能訪問它。對於分發給設備的應用程序,即使使用模糊處理,也不可能保證該祕密不會暴露給未授權方(基本上任何人在您的口袋中使用您的應用程序),從而有效地公開提供該密鑰。

鑑於此,從安全角度來看,爲訪問您的API的設備分配唯一的客戶端ID和密碼幾乎沒有意義。惡意開發者可以非常輕鬆地使用公共證書來構成「已批准」的應用程序。

正如您所看到的,您可以使用客戶端ID來執行設備分段,但也有其他方法可以執行此操作,例如User-Agent標頭不會導致錯誤的安全隱患。

總之,基於平臺嚮應用發佈唯一的客戶端ID沒有真正的好處。但是,考慮公共客戶在授權訪問API時如何考慮安全問題是很重要的。

+0

嗨Jared。感謝您的回答。其實我們正在內部構建2個移動應用程序。我的問題並不清楚 - 我編輯過它。 你覺得你需要根據這個來調整你的答案嗎? – dan

+0

我會做的是分配以下client_id:'your_app_name:ios'和'your_app_name:android',我不會爲應用程序分配一個祕密。實際上,client_id相當於一個更容易解析的用戶代理。您可以使用它來分割應用程序,例如,顯示用戶正在使用的設備列表,並允許它們在設備丟失時關閉設備。 –

+0

有趣的賈裏德。您的client_id將成爲OAuth條款中的consumer_key,對不對? – dan

0

如果您將使應用開發人員爲每個平臺使用多個OAuth使用者密鑰,那麼開發人員將不會感到滿意!開發人員必須以某種方式管理這些密鑰才能服務。如果應用程序開發人員需要重新發布密鑰會怎麼樣?如果他們在新平臺上推出應用程序?這些開發人員需要多少額外的努力來維護密鑰? 另外,請考慮一些您不知道的平臺:新的移動操作系統,奇怪的設備,不常見的用例。你想限制和控制你的服務的所有變種使用?

您仍然可以這樣做的原因之一是,您可以針對每個平臺單獨出售您的API服務(並可能使用不同的價格)。

相關問題