2012-03-04 41 views
14

我正在考慮構建一些移動應用程序。因此,這些應用程序將通過JSON和REST(例如,放置,發佈等)「與我的服務器通話」。人們如何處理RESTful API的驗證(技術不可知)

如果我想確保一個客戶端手機應用程序正在嘗試做某些需要某種「許可」的事情,那麼人們如何處理?

例如:

我們的網站銷售的東西 - >電視,汽車,服裝等API會 讓人們瀏覽商店和購買物品。要購買,您需要 「登錄」。我需要確保他們的手機使用 的人真的是他們。

這怎麼辦?

我已經看過twitter如何用他們的OAuth來做這件事情,看起來他們在REQUEST HEADER中有許多值。如果是這樣(我喜歡這種方法),是否有可能我可以使用另一個第三方作爲網站來存儲用戶名/密碼(例如twitter或Facebook是OAuth提供商)..我所做的只是以某種方式檢索自定義標題數據..並確保它存在於我的數據庫..其他..讓他們認證與他們的OAuth提供商?

或者還有另外一種方法嗎?

PS。我真的不喜歡有一個API密鑰的想法 - 我覺得它可以很容易地交給另一個人使用(我們不能冒這個風險)。

+0

這個問題有一些很好的答案:http://stackoverflow.com/questions/5511589/securing-an-api-ssl-http-basic-authentication-vs-signature和http:// stackoverflow。 COM /問題/ 3358501 /如何,應該-I-處理認證功能於我-REST的API。 – David 2012-03-04 00:18:59

回答

9

我們的網站銷售的東西 - >電視,汽車,連衣裙等。該API將 允許人們瀏覽商店和購買物品。要購買,您需要 「登錄」。我需要確保他們的手機使用 的人真的是他們。

如果這確實是一個需求,那麼您需要將用戶身份存儲在您的系統中。最流行的身份追蹤形式是通過用戶名和密碼。

我已經看過twitter如何使用他們的OAuth ..它和 看起來他們在請求頭文件中有很多值?如果是這樣(我喜歡這種方法),是否有可能我可以使用 另一個第三方作爲存儲用戶名/密碼的網站(例如, twitter或Facebook是OAuth提供商)..我所做的是 以某種方式檢索自定義標題數據..並確保它存在於 my db .. else ..讓他們使用他們的OAuth提供程序進行身份驗證?

您在這裏混淆了兩個不同的技術,OpenIDOAuth(不心疼,很多人得到難倒了這個)。 OpenID允許您將跟蹤和身份驗證推遲至供應商,然後在您的應用程序中接受這些身份,如接受程序依賴方。另一方面,OAuth允許應用程序(消費者)訪問屬於另一個應用程序或系統的用戶數據,而不會影響其他應用程序的核心安全性。如果您希望第三方開發人員代表您的用戶訪問您的API(您並未聲明您希望這麼做),那麼您將支持OAuth。

對於您所述的要求,您絕對可以考慮將Open ID集成到您的應用程序中。有很多可用於集成的庫,但是因爲您要求提供不可知論的答案,所以我不會列出其中的任何一個。

或者還有另外一種方法嗎?

當然。您可以將用戶標識存儲在系統中,並使用basicdigest身份驗證來保護您的API。基本身份驗證要求只有一個(很容易計算)附加在你的請求頭:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

如果使用基本或摘要式身份驗證,然後確保你的API端點與SSL保護,否則用戶憑據可以很容易地嗅探過度的空氣。您也可以預先去用戶身份識別,而不是通過信用卡信息在結帳時有效地驗證用戶身份,但這是一個判斷呼叫。

3

由於REST風格的服務使用HTTP調用,因此出於安全考慮,您可以在HTTP Basic Authentication上進行中繼。它很簡單,直接,並且已經被協議支持;如果你不想在交通中增加安全性,你可以使用SSL。諸如IBM Websphere Process Server等完善的產品使用這種方法。

另一種方法是根據您的應用程序需求構建您自己的安全框架。例如,如果您不希望您的服務僅由某些設備使用,則您可能需要通過網絡發送編碼令牌作爲標頭,以驗證請求來自授權源。亞馬遜有一個有趣的方式來做到這一點,你可以檢查它here

+1

絕對不使用沒有SSL的HTTP基本認證,因爲用戶名和密碼將以純文本形式發送。在這裏閱讀更多:http://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https – mkirk 2013-08-19 16:45:59

+0

我認爲建立自己的安全框架應該只能作爲最後的手段,有很多好的現有框架已經過嘗試和測試。 – ryanp102694 2017-02-13 19:07:16