![](/img/trans.png)
[英]Upload image file in server using ASIHTTPRequest from IPhone app
[英]Invalid S3 signature error when using server-side encryption and ASIHTTPRequest from an iPhone app
我有一個使用了一段時間的iPhone應用程序,該應用程序使用ASIHTTPRequest
將視頻上傳到Amazon S3上的存儲桶。 它運行良好,沒有任何問題。 最近,我們決定使用Amazon已實施的新“服務器端加密”。 這使您可以通過包括其他HTTP
請求標頭,告訴Amazon服務器自動加密已發布到存儲桶的文件。
我向應用程序中添加了一行代碼來實現此目的,但是現在我的Amazon上傳失敗。 出現的特定錯誤消息是:
“我們計算出的請求簽名與您提供的簽名不匹配。請檢查您的密鑰和簽名方法。”
我使用的存儲桶名稱符合Amazon的命名標准,因此我相信這不是問題。 我也相信我使用的秘密和公鑰是正確的。
我認為添加此標頭似乎在某種程度上破壞了簽名計算,因為它被包含在傳輸的一側但不包含在另一側。
我做錯了嗎? 還是這是ASIHTTPRequest
的錯誤?
這是我的代碼供參考:
[ASIS3Request setSharedSecretAccessKey:@"mysecretkey"];
[ASIS3Request setSharedAccessKey:@"myaccesskey"];
NSString *bucketPath = [NSString stringWithFormat:@"mypath/filename"];
ASIS3ObjectRequest *request = [ASIS3ObjectRequest PUTRequestForFile:filepath withBucket:@"my-bucket" key:bucketPath];
// If the following line is commented, the upload completes successfully
[request addRequestHeader:@"x-amz-server-side-encryption" value:@"AES256"];
////
request.requestScheme = ASIS3RequestSchemeHTTPS;
[request setShouldContinueWhenAppEntersBackground:YES];
[request startSynchronous];
if ([request error])
{
// The error messag is being displayed here
NSLog(@"xmit error: [%@]",[[request error] localizedDescription]);
}
您所做的一切正確,問題在於構造Authorization
標頭(即“請求簽名”)涉及對包含所有x-amz-
標頭的字符串進行簽名 ; 您已經添加了一個這樣的標頭( x-amz-server-side-encryption
),但是尚未使它成為簽名的一部分。
我剛剛創建了一個支持SSE的ASIHTTPRequest分支 。 如果使用該分支,則應該只能說[request setUseServerSideEncryption:YES];
。 另外,如果您對這項技術更感興趣,那么這里有使其實用的詳細信息 。
我遇到了同樣的問題,但是我沒有使用加密。 但是到目前為止,我發現大寫字母的簽名錯誤。
在我的情況下,我要使用ASIS3StorageClassReducedRedundancy
設置存儲類,其存儲值為@"REDUCED_REDUNDANCY"
,使用大寫形式。 如果我未設置此選項,則請求成功。
因此,也許您的問題出在具有大寫字母的AES256
值上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.