2012-04-25 38 views
3

我有暴露了REST API一個LAMP堆棧的web應用。目標是有3層 - 數據庫,服務(REST)和多個前端客戶端(網站,Android,iPhone)。目前,這些層級都在同一個框中。該網站使用API​​調用CRUD操作的服務邏輯,移動客戶端尚未建成。的OAuth 2移動客戶端,我自己

我使用的是PHP bcrypt執行,以存儲用戶憑據。這是設計慢/ CPU密集型的。每個API調用都需要一個用戶名/密碼對以及API參數。這將阻礙大規模擴展,因爲散列是通過每個API調用計算的。

所以,我一直在尋找替代品。 OAuth 2.0使用可撤銷的令牌,這些令牌使用起來並不昂貴,但我讀過的文章似乎暗示了此協議的主要用途是讓第三方訪問我的API。這不太適合我的模式,例如,移動客戶端由我擁有。

  1. 是OAuth的只是爲了與第三方使用,或者是典型的一家公司爲其移動客戶端添加OAuth的消費者對於自己的API?

  2. 是否還好捆綁使用Android/iPhone應用程序,我發佈到應用程序市場共享的祕密,使他們能夠立即與API關聯?

回答

3

的OAuth V2(http://oauth.net/2/)擁有多項認證模式(6種),雖然與最終用戶授權第三方應用程序的「3條腿」的情景是最可見,即使您擁有應用程序,它絕對是一個好方法。

可以潛在地使用兩個足流像可信憑證流http://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-4.3。基本上,您信任客戶端代碼(您編寫它)來接收並查看用戶的用戶名和密碼並將其發送到您的API。一旦完成,oAuth令牌就像普通問題一樣,並且密碼不需要再次通過連接。

關於共享密鑰的第二個問題 - 如果您的應用程序始終需要用戶登錄,那麼您可能可以避免將共享密鑰放入應用程序,因爲您的身份驗證依賴於用戶憑據(在這種情況下,只需將ID該應用程序,所以你知道它是哪個版本)。如果應用程序在某些模式下沒有用戶登錄的情況下運行,那麼您可能沒有多少選擇,只能嵌入某種類型的祕密,至少在init步驟中是這樣。

相關問題