1

我試圖建立Android使用亞馬遜的SimpleDB的應用程序。我查看了亞馬遜提供的示例代碼的源代碼。然而在演示中,證書只存儲在Constants.java中,我相信這種方法根本就不安全,因爲有人可能會反編譯apk以暴露證書,即使使用Proguard也是如此。安全的方式來存儲和使用Amazon訪問鍵爲Android

因此,我去讀了亞馬遜文章關於這一點,我不明白,因爲我不是很熟悉android/java中的密碼學。

我怎麼居然允許我的應用程序訪問亞馬遜的SimpleDB,同時保持快捷鍵從外部各方的安全嗎?

編輯1: 我想使用應用程序從SimpleDB中檢索數據,顯示在listview中。例如,像食物和其他用戶的簡單評論將能夠檢索到其他用戶發佈的相同評論。也許如果用戶想要發表評論,他們需要註冊一個帳戶並登錄。

+1

你不這樣做,因爲這個原因。您需要爲您的應用創建一個Web服務才能與之通話。 –

+0

你可以嘗試更好地隱藏它,但是你不能保證它的安全。見http://stackoverflow.com/questions/21646688/good-practice-how-to-handle-keystore-passwords-in-android-java/21647060#21647060例如。 – zapl

+0

@BrianRoach我明白了。除了Web服務之外,真的沒有辦法爲應用程序以某種方式保護證書嗎? – thhVictor

回答

0

沒有萬無一失的方法來做到這一點。無論我們做什麼,有人拿你的APK可能會反向工程和破解密碼(你通過混淆代碼使其變得困難,但它只是變得困難而不是萬無一失)。

如果您的應用程序要求用戶登錄(從您的後端或使用openid獲取一些憑據),然後使用它來讓用戶訪問您的服務器。然後在服務器代碼上,您可以使用IAM角色(http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)提供AWS憑證。

因此,通過使用用戶提供的密碼允許您的Web(REST)API訪問,並且您的服務器代碼通過IAM角色獲取訪問權限。這是最安全的方式。

如果你不想讓你的服務器/後端,那麼有沒有真正的萬無一失的方法。從以上@Bob

答案是精確如何做到這一點: https://stackoverflow.com/a/21839911/2959100

+0

我知道沒有辦法從上面提供的意見中保護客戶端。所以基本上從我理解的是,亞馬遜將允許訪問我的SimpleDB發佈讓我們說一個審查,如果我使用某種登錄爲我的應用程序? 我想要做的是:請參閱有問題的編輯1。 – thhVictor

+0

回答@Bob以上答案如何實現這一點。 –

4

AWS提供了幾個解決方案的交付憑據的硬外的裝置將它們編碼,一個或兩個可滿足您的特定需求:

我們的samples repository包括與這兩種技術集成的示例,雖然在SimpleDB示例中沒有具體說明。

+0

謝謝,我會盡快檢查它 – thhVictor

+0

問候我使用S3指南http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/s3transferutility.html來實現TransferUtility和我的應用程序正在工作,但cognito id是在應用程序代碼中,就像您提供的s3的示例repo一樣,是不是很危險? – cutiko

+1

@cutiko Cognito對硬編碼憑證提供了一些額外的保護,但如果您只是使用未經身份驗證的訪問,那麼是的,任何擁有您的認證身份池ID的人都將能夠生成憑證。 –

相關問題