【问题标题】:Azure Blob storage from iOS device: Server failed to authenticate the request来自 iOS 设备的 Azure Blob 存储:服务器无法对请求进行身份验证
【发布时间】:2016-01-29 03:39:57
【问题描述】:

Getting -“服务器未能对请求进行身份验证。确保 Authorization 标头的值格式正确,包括签名。”对 Azure 存储客户端进行身份验证时。 在 xcode 模拟器中一切正常。上传、下载和创建新容器。但是从我的 iOS 设备、iPhone 5s 和 iPad air 我无法进行身份验证。

代码(快速)

凭据 = AuthenticationCredential(azureServiceAccount:"myStorageAccount",accessKey:"myKeyIsHere") 客户端 = CloudStorageClient(凭据:凭据)

我从 Windows 操作系统中看到了一些类似问题的问题,其中答案似乎指向机器时钟与服务器不同步的方向。

但就我而言,我真的看不到任何时钟/时间问题。

有什么线索吗?

【问题讨论】:

  • 您可能需要检查的几件事: 1) 请确保帐户名称/密钥正确。 2) 请检查设备上的时间,确保它们的关闭时间不超过 15-20 分钟。这是授权失败的两个主要原因。
  • 账户名和密钥肯定是对的。我的设备在中欧时间运行,而服务器在某个美国时间线上运行。猜猜这是处理的,不是问题。我完全无法理解的是,如果某人的设备与原始时间有时间偏移,Azure 存储身份验证如何变得如此脆弱以至于它会失败。为什么不以与例如相同的方式进行身份验证。天蓝色移动服务
  • 它不脆,时间因素是出于安全目的。大约 15-20 分钟的时钟偏差是允许的,但如果超过这个时间,你会得到一个错误。这是因为为了防止有人获取授权标头并继续长时间重复请求。
  • 您是否使用某些特定的库来访问 Azure 存储?我无法通过查看您上面的代码来判断。特别是,您是否正在编写自己的身份验证代码?如果是这样,那可能是一个值得一看的地方,虽然它在模拟器上工作而不是在设备上工作很奇怪。
  • 另外,来自设备的 HTTP 请求是否有可能在传输过程中以某种方式被修改,而 iPhone 模拟器不会发生这种情况?如果中间有东西以某种方式修改 HTTP 请求,那可能会导致身份验证失败,因为它可以更改要签名的字符串

标签: ios iphone swift azure azure-blob-storage


【解决方案1】:

嗯,您使用的是Azure Storage iOS Client Library 吗?

如果是这样,你的 swift 代码应该是

let storageAccount = AZSCloudStorageAccount(fromConnectionString: yourConnectionString)

这个getting started 也应该有帮助。

【讨论】:

  • 谢谢@MichaelCurd。我正在使用另一个 library tweeked 来处理 iOS 设备,但身份验证过程显然意味着服务器到服务器
猜你喜欢
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 2020-01-29
  • 2021-08-23
  • 2014-09-19
  • 2020-02-02
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多