2010-02-13 87 views
3

我如何確保只有我的iPhone應用被允許使用我的應用引擎應用發送和接收數據?我可能不得不使用密鑰,但我不知道如何。我可以使用post/get通過https發送靜態密鑰嗎?或者我需要使用一些動態密鑰算法?iPhone訪問應用引擎密鑰

任何幫助,將不勝感激! Bjorn

回答

2

假設你認爲你可以保持iPhone應用程序的祕密被發現,你需要的是一個HMAC。對於您所做的每個請求,請將該請求的文本傳遞給像HMAC-SHA1這樣的函數,並將您的密鑰作爲密鑰,並將結果添加到您的請求中。當服務器收到請求時,執行相同的操作,並驗證HMAC是否匹配。

+0

這也給你一個安全問題。如果有人攔截HMAC並惡意使用它將數據完全相同的數據發佈到您的服務數百次,那麼複製您的數據會怎樣? – Rippo 2010-02-16 08:22:44

+0

然後你有一個問題 - 你有任何其他方案完全相同的問題。因此,我的開篇評論「假設你認爲你可以保持iPhone應用程序的祕密被發現......」。 – 2010-02-16 10:43:58

+0

對不起,我第一次誤讀你的評論。你是對的 - 你需要包含一個隨機數和/或時間戳來防止重放攻擊。當然,這可能不是問題,取決於他的威脅模型。 – 2010-02-17 08:37:24

0

我不完全確定你想要完成什麼。

但是,在iPhone應用程序中共享祕密或API密鑰通常是一個糟糕的主意。

您正在討論您自己的AppEngine應用程序。你爲什麼不在AppEngine一側創建一個簡單的(基於JSON的)Web服務來與你的應用程序通信?我懷疑是否有任何需要從您的iPhone應用程序直接使用您的AppEngine憑據。

如果這不能解決您的問題,請提供更多詳細信息。

+0

我有一個API的Web服務,但我只想讓我的iPhone應用程序與它交談。在目前情況下,API可供全世界使用,所以任何人都可以向其發送不良數據,並且我的數據庫將充滿我不想擁有的數據。 – Bjorn 2010-02-13 15:10:35

0

在您的Web服務上使用SSL證書,因爲傳遞給它的任何數據都已加密。

加密的SSL連接需要 客戶 和服務器之間發送的所有信息由 發送軟件進行加密和解密由 接收軟件,通過互聯網 保護私人 信息被截取。

此外,每次調用服務時都會發送一個您已經與數據一起定義的GUID。在Web服務執行任何操作之前,必須驗證此GUID。要進一步鎖定,可以創建一個服務,該服務生成一個guid,以便爲任何後續呼叫服務進行備份。

此外,請確保您不允許任何人在服務器上看到您的wsdl,否則他們可以猜出您的參數。

來自RapidSSL的SSL ceritifcate每年花費17美元,所以成本無需擔心。

+1

這沒有幫助 - SSL證書驗證服務的身份,而不是客戶端。他可以嵌入客戶端證書,但App Engine無法驗證客戶端證書。 – 2010-02-13 17:03:15

+0

您是否閱讀了我的文章? SSL只是阻止人們窺探你在客戶端和服務器之間實際發送的內容。通過指導似乎是一個好方法。 – Rippo 2010-02-13 20:44:58