Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon S3 iOS SDK照片上载错误-签名不匹配_Ios_Amazon Web Services_Amazon S3_Amazon_Put - Fatal编程技术网

Amazon S3 iOS SDK照片上载错误-签名不匹配

Amazon S3 iOS SDK照片上载错误-签名不匹配,ios,amazon-web-services,amazon-s3,amazon,put,Ios,Amazon Web Services,Amazon S3,Amazon,Put,因此,我的iPhone应用程序成功地将照片上传到AmazonS3。我使用了与S3Uploader示例项目相同的代码以及最新(1.6.0版)的AmazonAWSSDKforiOS。问题是我会间歇性地得到SignatureDesNotMatch错误(我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。)。没有规律可循。当前,我的应用程序正在通过对代理调用didFailWithError:进行一定量的重试来解决此错误 到目前为止,在我的测试中,有足够的重试次数,因此用户不会注意到错误,但

因此,我的iPhone应用程序成功地将照片上传到AmazonS3。我使用了与S3Uploader示例项目相同的代码以及最新(1.6.0版)的AmazonAWSSDKforiOS。问题是我会间歇性地得到SignatureDesNotMatch错误(我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。)。没有规律可循。当前,我的应用程序正在通过对代理调用didFailWithError:进行一定量的重试来解决此错误

到目前为止,在我的测试中,有足够的重试次数,因此用户不会注意到错误,但是当我的签名明显正确时,我收到了一个签名密钥错误,这是非常令人沮丧的,因为它有时会工作。我不确定这是否是一个url编码错误(我的签名密钥中有一个+号),但由于我使用的是iOS SDK,所以我看不到如何处理PUT url


此外,我还验证了我的bucket名称都是小写,文件名只是数字和几个字母。我还尝试了不同的地区,他们都有相同的结果。简言之,要在没有SignatureDesNotMatch错误的情况下获得成功的PUT,可能需要0到5次重试。有没有人有过类似的问题?任何帮助都将不胜感激。感谢阅读。

您可能需要在生成签名后对其进行按摩,因为valid 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编码的等价物。我使用搜索/替换策略是因为我工作的环境中没有合适的url编码库。由于我的代码只能生成3个明显不安全的base64字符,因此我显然已经处理了这三种可能性。

生成签名后,您可能需要对签名进行处理,因为有效的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编码的等价物。我使用搜索/替换策略是因为我工作的环境中没有合适的url编码库。由于我的代码只能生成3个明显不安全的base64字符,因此我显然继续处理了这三种可能性。

好的。因此,在过去几天里尝试了新的bucket之后……尝试了所有不同的NSString编码/UIImage到NSData语句……从嵌入式转换到TVM……从我的项目到TVM演示来回跳跃……阅读了一页又一页的调试输出……我发现这与任何这些都无关!:P

一旦我意识到我无意中将AWS框架复制到了我的项目文件夹中,我就将它们删除并重新添加,而没有选中复制框(参考我的SDK文件夹)。Boom-不再出现签名错误


AWS SDK显然不喜欢在一个系统上有多个框架实例。希望这对其他人有帮助!:)

好的。因此,在过去几天里尝试了新的bucket之后……尝试了所有不同的NSString编码/UIImage到NSData语句……从嵌入式转换到TVM……从我的项目到TVM演示来回跳跃……阅读了一页又一页的调试输出……我发现这与任何这些都无关!:P

一旦我意识到我无意中将AWS框架复制到了我的项目文件夹中,我就将它们删除并重新添加,而没有选中复制框(参考我的SDK文件夹)。Boom-不再出现签名错误


AWS SDK显然不喜欢在一个系统上有多个框架实例。希望这对其他人有帮助!:)

我是用于iOS的AWS SDK的维护者之一。您指示您使用的代码与S3Uploader相同。这是否意味着您正在使用嵌入式凭据?注意,我们不建议您这样做,因为您的应用程序可能会被破坏,并且凭据可能会被提取。也就是说,这个错误是否只发生在最终用户的设备上,或者您是否能够在自己的设备或模拟器上重现它?嗨,鲍勃。谢谢你的回复!另外,感谢您提供有关嵌入式凭据的信息。IAM是更安全的路线吗?如果是这样的话,你能告诉我一些使用IAM和iOS SDK的例子吗?关于我最初的问题,该应用程序仍在开发中,因此我只能自己测试和生产它(在模拟器中-尚未在设备上试用)。到目前为止,唯一的PUT请求来自我自己。感谢您的时间。使用IAM凭据肯定比使用根凭据要好,但不会消除应用程序可能受到损害的问题。我们建议使用TVM或web身份联合。AWS SDK for iOS的1.6.0版包括这两种凭据管理方法的示例。您还可以阅读以下文章了解更多信息。谢谢,鲍勃。虽然我的问题与此无关,但我仍然从您的反馈中获益。我没有使用IAM/嵌入式凭据,而是让TVM服务器在Elastic Beanstalk上运行。学习新东西总是很好。我是用于iOS的AWS SDK的维护者之一。您指示您使用的代码与S3Uploader相同。这是否意味着您正在使用嵌入式凭据?注意,我们不建议您这样做,因为您的应用程序可能会被破坏,并且凭据可能会被提取。也就是说,这个错误是否只发生在最终用户的设备上,或者您是否能够