尝试使用SAS令牌时出错。
我在容器上生成令牌,如下所示:
var client = _account.CreateCloudBlobClient();
var container = client.GetContainerReference("2017-med");
var sas = container.GetSharedAccessSignature(new SharedAccessBlobPolicy
{
Permissions = SharedAccessBlobPermissions.Read,
SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddYears(5)
});
我将它附加到容器中的资源的URL,并在访问URL时收到此错误消息:
签名不匹配。要使用的字符串是r 2023-05-14T05:48:34Z / blob / myblobname / 2017-med 2017-07-29
是否可以为容器中的资源使用容器令牌?或者还有什么在这里发挥作用?
答案 0 :(得分:0)
正如我测试的那样,您在资源管理器中搜索sasuri并且只读取您设置的容器权限。
我建议您可以在sas政策中添加列表权限,如下所示:
var sas = container.GetSharedAccessSignature(new SharedAccessBlobPolicy
{
Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List
SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddYears(5)
});
然后当您在资源管理器中搜索它时,您可以列出容器中的所有blob,以判断您生成的sasuri是否正确。
List Blobs请求可以如下构造。 建议使用HTTPS。将myaccount替换为存储帐户的名称:
https://myaccount.blob.core.windows.net/mycontainer?restype=container&comp=list&sastoken
实际上,当您为容器生成sasuri时,您可以使用sasuri访问容器中的blob并在您的许可下执行某些操作。
string sasUri = uricontainer;
CloudBlockBlob blob = new CloudBlockBlob(new Uri(sasUri));
<强>更新强>:
签名不匹配。使用的字符串是r 2023-05-14T05:48:34Z / blob / myblobname / 2017-med 2017-07-29
正如您所提供的,我发现您的storagename是 myblobname ,这是非常困惑的。
我发现确实存在名为myblobname 的storagename。所以,我想也许你有一个拼接错误。
您可以使用var bloburi = container.Uri + sas;
获取完整的uri。
如果你想用完整的uri显示列表或其他操作,你可以参考我提供的上述代码。