将 DefaultAzureCredential 用于 DataLakeServiceClient

问题描述 投票:0回答:1

我有一个 api,它向调用者授予 sas 令牌,以将文件上传到 blob 存储。我想让它与 DefaultAzureCredential 一起使用。

这是我的program.cs中的代码:

builder.Services.AddAzureClients(azureBuilder => 
{
    var credential = new DefaultAzureCredential();
    azureBuilder.UseCredential(credential);
    azureBuilder.AddDataLakeServiceClient(new Uri("https://mystorageaccount.dfs.core.windows.net/"));
});

这就是我生成 sas uri 的方式:

        public string GenerateSasUri(string containerName) 
        {
            if (string.IsNullOrWhiteSpace(containerName)) throw new ArgumentNullException(nameof(containerName));

            var permissions = DataLakeFileSystemSasPermissions.Add 
                | DataLakeFileSystemSasPermissions.Write
                | DataLakeFileSystemSasPermissions.Create
                | DataLakeFileSystemSasPermissions.List;

            return _dataLakeServiceClient
                .GetFileSystemClient(containerName)
                .GenerateSasUri(permissions, DateTimeOffset.Now.AddMinutes(15))
                .AbsoluteUri;
        }

但我收到此错误:

System.ArgumentNullException: 'Value cannot be null. (Parameter 'sharedKeyCredential')'

检查 DataLakeServiceClient 上的属性后,我发现 _dataLakeServiceClient.CanGenerateAccountSasUri 属性为 false?

我是否误解了一些事情?这不应该起作用吗?

azure azure-data-lake
1个回答
0
投票

由于您使用 Azure AD 进行身份验证,因此无法创建服务 SAS,而只能创建 用户委托 SAS。

请参阅这篇文章,了解如何为 blob 创建用户委托 SAS:使用 .NET 为 blob 创建用户委托 SAS

© www.soinside.com 2019 - 2024. All rights reserved.