有線の問題に直面しています..
特定のユーザーが Azure-Container との間でファイルを読み書きできるようにしたいと考えています。このために、SharedAccessSignature の概念を使用しています。
クライアントがアクセス キーを取得するために呼び出す RESTFUL (ASP.NET MVC4) Web サービスで共有アクセス署名を生成しています。
CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient ();
CloudBlobContainer container = blobClient.GetContainerReference (containerName);
container.CreateIfNotExist ();
BlobContainerPermissions containerPermissions = new BlobContainerPermissions ();
containerPermissions.PublicAccess = BlobContainerPublicAccessType.Off;
container.SetPermissions (containerPermissions);
string sas = container.GetSharedAccessSignature (new SharedAccessPolicy ()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes (30),
Permissions = SharedAccessPermissions.Write | SharedAccessPermissions.Read
});
//return sas to user
sas
次のコードを使用して BLOB をアップロードしようとするクライアントに戻ります。
CloudBlobClient sasBlobClient = new CloudBlobClient ("http://127.0.0.1:10000/devstoreaccount1", new StorageCredentialsSharedAccessSignature (sak));
CloudBlob blob = sasBlobClient.GetBlobReference (containerName + "/myblob.txt");
blob.UploadText ("Hello SAS World");
最後の行で、クライアントが例外をスローします
サーバーは要求を認証できませんでした。Authorization ヘッダーの値が、署名を含めて正しく形成されていることを確認してください。
内部例外: {"リモート サーバーがエラーを返しました: (403) 許可されていません。"}
興味深いのは、クライアント側のコードを取得した直後に配置するsas
(string sas = container.GetShare....... )
と、例外なく動作することです。しかし、クライアント コードを別のコンソール アプリケーション (その後、REST 呼び出しを介してキーを取得する) に配置すると、例外がスローされます。