使用 Azure Ad Auth 从 .NET Core Web API 读取/写入 Azure Blob

Posted

技术标签:

【中文标题】使用 Azure Ad Auth 从 .NET Core Web API 读取/写入 Azure Blob【英文标题】:Read/Write into Azure Blob from .NET Core Web API using Azur Ad Auth 【发布时间】:2021-10-13 22:48:40 【问题描述】:

我正在尝试从我的 API 合并 blob 上传。于是创建了存储帐户和容器。

并且身份验证模式设置为 Azure AD。在我们的组织政策中,我们被限制使用连接字符串

但是关于从 blob 上传/下载的教程中有 90% 使用的是 Connectionstring .NET Core Blob access

但由于我是基于 Azure AD 的,我真的很困惑如何继续

我尝试过这种方式,但很晚我发现它在 .net 5 中不支持

        var tokenCredential = new TokenCredential(_StorageAuth.AccessToken, TokenRenewerAsync, null, tokenExpiry);
        string blobcontainer = "blob-container-dev-dv1";
        string storageName = "apllmyappdevuksst";

        var storageAccount = new CloudStorageAccount(new StorageCredentials(tokenCredential), storageName, null, true);


        
        //Uri accountUri = new Uri(storageAccount.BlobStorageUri.ToString());
        //BlobServiceClient client = new BlobServiceClient(accountUri, new DefaultAzureCredential());

我真的不知道接下来如何从 .NET core 5 将文件上传到 blob

令牌和存储范围的一切都正确

【问题讨论】:

我的示例应用可能会有所帮助:github.com/juunas11/managedidentity-filesharing/blob/… 你试过thisBlobServiceClient的构造函数吗? 根据docs.microsoft.com/en-us/azure/storage/common/…,它说使用 DefaultAzureCredential DefaultAzureCredentialTokenCredential 的一种类型,因此可以使用。我建议在这里阅读它 - docs.microsoft.com/en-us/dotnet/api/… 以更好地了解它的实际工作原理。 哦,一旦你有了 BlobServiceClient,你就可以使用你分享的链接中提到的相同代码。从那时起,一切都会完全一样。 【参考方案1】:

我不知道,这太直接了。分享给有类似需求的人 非常感谢@Gaurav Matri 指出这一点

 BlobServiceClient client = new BlobServiceClient(new Uri("https://storageaccount.blob.core.windows.net/container"), new DefaultAzureCredential());
  BlobContainerClient containerClient = client.GetBlobContainerClient("container");

   string f = Path.GetFileName(filename);
   BlobClient blobClient = containerClient.GetBlobClient(f);

   var path = Path.Combine(Directory.GetCurrentDirectory(), "ADOData", "Before2020.txt");
   using FileStream uploadFileStream = File.OpenRead(path);

   await blobClient.UploadAsync(uploadFileStream, true);
   uploadFileStream.Close()

【讨论】:

以上是关于使用 Azure Ad Auth 从 .NET Core Web API 读取/写入 Azure Blob的主要内容,如果未能解决你的问题,请参考以下文章

Asp Core:Azure Ad Auth + 自定义 JWT + 自定义身份存储

使用 JWT 令牌保护 asp.net 核心 Web api 时如何从 Azure AD 获取用户

具有范围的 Azure AD 应用程序权限

.net 核心 2.2 Azure Ad Jwt 令牌

401 使用 Azure AD 在 .NET Core 3.1 中仅使用不记名令牌进行身份验证

如何从 Asp.net Core 中的查询字符串验证 Azure AD B2C 令牌?