2013-07-22 79 views
1

所以我的iPhone應用程序成功地將照片上傳到Amazon S3。我使用與S3Uploader示例項目相同的代碼,以及適用於iOS的最新(1.6.0版)Amazon AWS SDK。問題是間歇性地出現SignatureDoesNotMatch錯誤(我們計算的請求籤名與您提供的簽名不匹配,請檢查您的密鑰和簽名方法)。它沒有模式。目前我的應用程序通過在委託調用didFailWithError上執行一定數量的重試來解決此錯誤。Amazon S3 iOS SDK照片上傳錯誤有時候 - SignatureDoesNotMatch

到目前爲止,我的測試有足夠的重試次數,所以用戶不會注意到這個錯誤,但是當我的簽名顯然是正確的時候知道我得到了一個簽名密鑰錯誤是相當令人沮喪的,因爲它有時會起作用。我不確定它是否是URL編碼錯誤(我的簽名密鑰有+號),但是由於我使用的是iOS SDK,我沒有看到如何處理PUT網址。

此外,我驗證了我的存儲桶名稱都是小寫字母,我的文件名只是數字和一些字母。我也嘗試了不同的地區,他們都有相同的結果。簡而言之,它可以從0次重試到5次重試,從而在沒有SignatureDoesNotMatch錯誤的情況下獲得成功的PUT。有沒有人有類似的問題?任何幫助將不勝感激。謝謝閱讀。

+0

我是AWS SDK for iOS的維護人員之一。您表示您使用的是與S3Uploader相同的代碼。這是否意味着您正在使用嵌入憑證?請注意,我們不建議您這樣做,因爲您的應用可能會被泄露並且提取證書。 這就是說,這個錯誤只發生在最終用戶的設備上,還是你能夠在你自己的設備或模擬器上重現它? –

+0

嗨,鮑勃。謝謝回覆!另外,感謝您獲取嵌入憑證的信息。 IAM會是更安全的路線嗎?如果是這樣,你能指示我使用iOS SDK的IAM的一些例子嗎?關於我最初的問題,該應用程序仍在開發中,所以我只能自己測試並生成它(在模擬器中 - 尚未在設備上嘗試過)。所以到目前爲止,唯一的PUT請求來自我自己。謝謝你的時間。 – rymagno

+0

使用IAM憑證肯定會比使用根憑證更好,但不會消除可能受到危害的應用程序問題。我們建議使用TVM或Web聯合身份驗證。版本1.6。適用於iOS的AWS SDK的0包含這兩種憑證管理方法的樣本。您還可以閱讀以下文章以獲取更多信息[網絡聯合身份驗證](http://aws.amazon.com/articles/4617974389850313),[令牌自動販賣機](http://aws.amazon.com/articles/4611615499399490 )。 –

回答

2

好的。因此,在花了幾天的時間嘗試新的桶之後......嘗試所有不同的NSString編碼/ UIImage到NSData語句......從嵌入式切換到TVM ......從我的項目跳轉到TVM演示......並閱讀調試輸出頁面和頁面......我發現它與任何這些都沒有關係! :P

一旦我意識到我已經無意中將AWS框架複製到我的項目文件夾中,我將它們刪除並重新添加它們而沒有選中複製框(引用我的SDK文件夾)。繁榮 - 沒有更多的簽名錯誤。

AWS SDK顯然不喜歡在一個系統上有多個框架實例。希望這可以幫助別人! :)

3

您可能需要在簽名後按摩簽名,因爲有效的base64在查詢字符串中並不總是有效。我必須在一個時間碰到了同樣的問題,一旦問題,因爲我發現一些代碼,我寫了如下評論:

# the "+" is not url-safe, as it gets converted to a space somewhere along the line 

# '+' => '%2B' 

# while we're at it, we'll go ahead and convert the other non-safe-ish 
# characters even though the links seem to work without this step 

# '/' => '%2F' 
# '=' => '%3D' 

我的代碼執行字符串搜索和替換爲那些3個字符,它們改變自己的網址 - 在將查詢字符串返回給調用者之前編碼的等價物。我使用了搜索/替換策略,因爲我工作的環境沒有合適的url編碼庫。由於這些是我的代碼可能生成的僅有的3個base64字符,顯然不是網址安全的,所以我顯然繼續並處理了所有三種可能性。

+0

謝謝邁克爾 - 因爲我使用AWS iOS SDK,它實際上是爲我處理URL。但是,如果將來我自己處理它,我會用它作爲參考。 – rymagno

+1

夥伴,非常感謝。你救了我,我只能想象會花幾個小時試圖弄清楚到底發生了什麼。隊友的歡呼聲。 –