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()メソッドは私に腹を立て、「サーバーはリクエストの認証に失敗しました。署名を含めてAuthorizationヘッダーの値が正しく形成されていることを確認してください。」というWebExceptionをスローします。
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ポータルから提供された正しいキーを使用して、実際のストレージで試してみると同じ問題が発生します。
新しいRESTAPIに対して実行するプロパティまたは新しい初期化はありますか?
更新:@Gaurav Mantriが彼の返信で開発したコンソールアプリケーションを試しましたが、それでも機能しませんでした。したがって、問題は私のマシンでのイタリア語のローカリゼーション、またはWindows 8に関連するいくつかの問題に依存している可能性があります(別の同僚のマシンでは、コンソールアプリケーションも機能せず、同じエラー403が禁止されています!GetResponse
)。取得したURIは、ネット上で見つけたすべての例とは異なることに気づきました。そのため、開始時刻と有効期限は、(たとえば)2013-01-22T09.52.27Z
ではなくとして表示されます。2013-01-22T09%3A52%3A27Z