【发布时间】:2013-07-21 20:19:06
【问题描述】:
所以我的 iPhone 应用程序成功地将照片上传到 Amazon S3。我使用了与 S3Uploader 示例项目相同的代码和最新(1.6.0 版)适用于 iOS 的 Amazon AWS 开发工具包。问题是间歇性地我会收到 SignatureDoesNotMatch 错误(我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。)。它没有模式。目前,我的应用程序正在通过对委托调用 didFailWithError: 进行一定数量的重试来解决此错误。
到目前为止,我的测试已经进行了足够多的重试,因此用户不会注意到错误,但是当我的签名明显正确时知道我收到签名密钥错误是非常令人沮丧的,因为它有时会起作用。我不确定这是否是 url 编码错误(我的签名密钥中有一个 + 号),但由于我使用的是 iOS SDK,我看不到 PUT url 的处理方式。
另外,我验证了我的存储桶名称都是小写的,我的文件名只是数字和几个字母。我也尝试了不同的区域,它们都有相同的结果。简而言之,它可能需要 0 次重试到 5 次重试才能获得成功的 PUT 而不会出现 SignatureDoesNotMatch 错误。有没有人有类似的问题?任何帮助将不胜感激。感谢阅读。
【问题讨论】:
-
我是适用于 iOS 的 AWS 开发工具包的维护者之一。您表明您使用与 S3Uploader 相同的代码。这是否意味着您正在使用嵌入式凭据?请注意,我们不建议这样做,因为您的应用程序可能会受到损害并提取凭据。话虽如此,此错误是否仅发生在最终用户的设备上,还是您能够在自己的设备或模拟器上重现它?
-
嗨,鲍勃。谢谢回复!另外,感谢您提供有关嵌入式凭据的信息。 IAM 会是更安全的路线吗?如果是这样,您能否指导我使用带有 iOS SDK 的 IAM 的一些示例?关于我最初的问题,该应用程序仍在开发中,所以我只能自己测试和生产它(在模拟器中 - 尚未在设备上尝试过)。所以到目前为止,唯一的 PUT 请求来自我自己。感谢您的宝贵时间。
-
使用 IAM 凭证肯定比使用根凭证更好,但并不能消除您的应用程序可能被泄露的问题。我们建议使用 TVM 或 Web 身份联合。适用于 iOS 的 AWS 开发工具包版本 1.6.0 包含这两种凭证管理方法的示例。您也可以阅读以下文章了解更多信息web identity federation、token vending machine。
-
谢谢,鲍勃。尽管我的问题与此无关,但我仍然从您的反馈中受益。我没有使用 IAM/嵌入式凭证,而是让 TVM 服务器在 Elastic Beanstalk 上运行。学习新事物总是很好。
标签: ios amazon-web-services amazon-s3 amazon put