我正在将 Windows Azure 从 1.7 迁移(叹气)到版本 2,我现在面临着旧身份验证方式的一些麻烦。当我尝试执行下一个代码时(使用 Azure SDK 的旧实现)......
[...]
var policy = new SharedAccessBlobPolicy();
policy.SharedAccessStartTime = new DateTimeOffset(DateTime.UtcNow.AddMinutes(-5));
policy.SharedAccessExpiryTime = policy.SharedAccessStartTime.Value.AddMinutes(5);
policy.Permissions = SharedAccessBlobPermissions.Read;
var sas = blobContainer.GetSharedAccessSignature(policy)
var request = WebRequest.Create(string.Format("{0}/{1}{2}", containerUri, blobName, sas));
request.Method = "GET";
var headers = new NameValueCollection();
headers.Add("x-ms-blob-type", "BlockBlob");
request.Headers.Add(headers);
request.ContentLength = 0;
var response = (HttpWebResponse)request.GetResponse();
[...]
... GetResponse() 方法对我很生气,并抛出一个 WebException 说“服务器无法验证请求。确保 Authorization 标头的值正确形成,包括签名。 ”
ResponseUri 是http://127.0.0.1:10000/devstoreaccount1/testcontainer/testBlob?sv=2012-02-12&st=2013-01-22T09.52.27Z&se=2013-01-22T09.57.29Z&sr=c&sp=r&sig=WxFfIg9NxKodH7zGjKRym7RuXd61F5jlG6ILtG1UYPg%3D
,对我来说看起来不错。我认为这是 AccountKey 的问题,但在真实存储上尝试使用 Azure 门户提供的正确密钥时,我遇到了同样的问题。
是否需要为新的 REST API 完成任何属性或新的初始化?
更新:我在他的回复中尝试了@Gaurav Mantri 开发的控制台应用程序,但它仍然不适合我。所以,我怀疑这个问题可能取决于我机器上的意大利语本地化,或者与 Windows 8 相关的一些东西(在另一位同事的机器上,控制台应用程序也不能正常工作,同样的错误 403,被禁止!由GetResponse
)。我注意到我们得到的 URI 与我在网上找到的每个示例都不同,所以我将开始和到期时间视为(例如)2013-01-22T09.52.27Z
而不是2013-01-22T09%3A52%3A27Z