我面临一个有线问题..
我想允许某些用户从/向 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 调用检索密钥),它会引发异常。