2013-07-22 2 views
1

그래서 내 iPhone 앱이 사진을 Amazon S3에 성공적으로 업로드합니다. S3Uploader 예제 프로젝트와 동일한 코드를 iOS 용 최신 Amazon AWS SDK (버전 1.6.0)와 함께 사용했습니다. 문제는 간헐적으로 SignatureDoesNotMatch 오류가 발생합니다 (계산 한 요청 서명이 사용자가 제공 한 서명과 일치하지 않습니다.) 키와 ​​서명 방법을 확인하십시오. 패턴이 없습니다. 현재 내 응용 프로그램은 delegate call didFailWithError :에 대해 일정량의 재 시도를 수행하여이 오류를 해결하기 위해 노력하고 있습니다. 사용자가 오류를 통지하지 않도록Amazon S3 iOS SDK 사진 업로드 오류 가끔 - SignatureDoesNotMatch

지금까지 내 테스트와 충분히 시도가 있지만, 항상 작동하기 때문에 내 서명이 분명히 올 때 내가 서명 키 오류가 발생하고 있음을 알고 매우 실망. URL 인코딩 오류 (내 서명 키에 + 기호가 있음)인지 확실하지 않지만 iOS SDK를 사용하고 있기 때문에 PUT url이 어떻게 처리되는지 알지 못합니다.

또한 버킷 이름은 모두 소문자이며 내 파일 이름은 숫자와 알파벳 문자 몇 개임을 확인했습니다. 나는 또한 다른 지역을 시도하고 모두 동일한 결과가 있습니다. 즉, SignatureDoesNotMatch 오류없이 성공한 PUT을 얻으려면 0 번의 재시도에서 5 번의 재시도까지 걸릴 수 있습니다. 비슷한 문제가있는 사람이 있습니까? 어떤 도움이라도 대단히 감사하겠습니다. 읽어 주셔서 감사합니다.

+0

저는 iOS 용 AWS SDK의 관리자 중 한 명입니다. S3Uploader와 동일한 코드를 사용하고 있음을 나타냅니다. 내장 된 자격 증명을 사용한다는 의미입니까? 앱이 손상되어 자격 증명이 추출 될 수 있으므로 권장하지 않습니다. 이 오류는 최종 사용자의 장치에서만 발생합니까? 아니면 자신의 장치 또는 시뮬레이터에서 재현 할 수 있습니까? –

+0

안녕하세요. Bob. 답장을 보내 주셔서 감사합니다! 또한 임베디드 자격 증명에 대한 정보를 주셔서 감사합니다. IAM이 더 안전한 경로일까요? 그렇다면 iOS SDK와 함께 IAM을 사용하여 몇 가지 예를 안내해 줄 수 있습니까? 내 초기 질문에 관해서는, 그 응용 프로그램은 아직 개발 중이므로 (시뮬레이터에서 - 아직 장치에서 시도하지 않은) 직접 테스트하고 제작할 수있었습니다. 그래서 유일한 PUT 요청은 지금까지 나 자신으로부터 왔습니다. 시간 내 줘서 고마워. – rymagno

+0

IAM 자격 증명을 사용하면 루트 자격 증명을 사용하는 것보다 낫겠지 만 애플리케이션이 손상 될 가능성은 제거되지 않습니다. TVM 또는 웹 ID 연합을 사용하는 것이 좋습니다. 버전 1.6.iOS 용 AWS SDK의 0에는 이러한 두 가지 자격 증명 관리 방법에 대한 샘플이 포함되어 있습니다. 자세한 내용은 [웹 ID 연합] (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' 

내 코드가 문자열 검색을 수행하고 자신의 URL-로 변경하는 3 자에 대한 대체 : 나는 내가 쓴 일부 코드에 다음과 같은 의견을 발견하기 때문에 한 번에 한 번 같은 문제 문제로 실행해야합니다 호출자에게 쿼리 문자열을 반환하기 전에 인코딩 된 해당 항목. 검색/바꾸기 전술을 사용했는데 그 이유는 내가 일하고있는 환경에서 올바른 URL 인코딩 라이브러리를 사용할 수 없었기 때문입니다. 이 코드는 내 코드가 생성 할 수있는 유일한 3 개의 base64 문자이기 때문에 분명히 URL 안전이 아니며 분명히 앞서 세 가지 가능성을 모두 처리했습니다.

+0

Thanks Michael - AWS iOS SDK를 사용하면서 실제로 URL을 처리하고있었습니다. 그러나 나는 미래에 내가 그들 자신을 다루는 경우 이것을 참고로 사용할 것입니다. – rymagno

+1

메이트, 정말 고마워. 도대체 무슨 일이 일어나고 있는지를 생각해 보려고 몇 시간 동안 상상할 수 있었던 것만 뒀다. 힘내 친구 야. –