azure - 我想通过 Azure Blob 容器的 C# 代码动态生成 SAS URL。使用此 SAS URL 我们必须能够上传文件

标签 azure azure-blob-storage azure-storage azure-storage-account

我想通过 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/

相关文章:

Azure 数据工厂复杂 JSON 源(嵌套数组)到 Azure Sql 数据库?

azure - 如何在 U-SQL 连接中使用 OR 逻辑运算符?

image - 从 url 创建 imagebrush、位图和 writeablebitmap

.net - 使用 .NET SDK 12 从 Azure Blob 存储中的特定目录/文件夹获取文件

c# - 我可以创建一个向仪表板公开功能但不使用 Azure 存储的 Azure Webjob 吗?

sql-server - BCP命令输出文件直接保存到云存储

.net - 使用 Windows Azure SDK 1.8 和 Windows Azure Tools 打包云项目时出错 2012 年 10 月

asp.net - 配置 Azure 的事件中心以接收来自 ASP.NET MVC Web 应用程序的事件

python-3.x - 重用从 DeviceCodeCredential 获得的 token

python - 如何在 python 中针对 Azure 存储 blob 对用户进行身份验证?