我有一个 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 AD 进行身份验证,因此无法创建服务 SAS,而只能创建 用户委托 SAS。
请参阅这篇文章,了解如何为 blob 创建用户委托 SAS:使用 .NET 为 blob 创建用户委托 SAS。