【发布时间】: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