我想通过 Azure Blob 容器的 C# 代码动态生成 SAS URL。使用此 SAS URL,我们必须能够将文件上传到 Azure Blob 容器。我按照 Microsoft 文档尝试了多种方法来生成 SAS URL。但我总是收到 AuthorizationResourceTypeMismatch 错误或 AuthorizationPermissionMismatch。
错误:AuthorizationPermissionMismatch
此请求无权使用此权限执行此操作。
private static Uri GetServiceSasUriForContainer(BlobContainerClient containerClient,
string storedPolicyName = null)
{
// Check whether this BlobContainerClient object has been authorized with Shared Key.
if (containerClient.CanGenerateSasUri)
{
// Create a SAS token that's valid for one hour.
BlobSasBuilder sasBuilder = new BlobSasBuilder()
{
BlobContainerName = containerClient.Name,
Resource = "c"
};
if (storedPolicyName == null)
{
sasBuilder.ExpiresOn = DateTimeOffset.UtcNow.AddHours(1);
sasBuilder.SetPermissions(BlobContainerSasPermissions.Read);
}
else
{
sasBuilder.Identifier = storedPolicyName;
}
Uri sasUri = containerClient.GenerateSasUri(sasBuilder);
Console.WriteLine("SAS URI for blob container is: {0}", sasUri);
Console.WriteLine();
return sasUri;
}
else
{
Console.WriteLine(@"BlobContainerClient must be authorized with Shared Key
credentials to create a service SAS.");
return null;
}
}
错误:AuthenticationFailed
服务器无法验证请求。确保授权 header 的值格式正确,包括签名。
我需要此 sas url,因为我在 javascript 中使用此 url 将文件上传到 Azure Blob 容器。 有人可以帮助我实现这个目标吗?
最佳答案
您收到此错误的原因是因为您正在创建具有读取
权限 (BlobContainerSasPermissions.Read
) 的 SAS token 。
为了使用 SAS URL 上传容器中的 Blob,SAS token 需要 Write
(BlobContainerSasPermissions.Write
) 或 Create
(BlobContainerSasPermissions.Create
) 权限。请创建具有这些权限之一的 SAS token ,您应该不会收到此错误。
要了解有关权限的更多信息,请参阅此链接:https://learn.microsoft.com/en-us/rest/api/storageservices/create-service-sas#permissions-for-a-directory-container-or-blob .
关于azure - 我想通过 Azure Blob 容器的 C# 代码动态生成 SAS URL。使用此 SAS URL 我们必须能够上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70974831/