首页 > 解决方案 > Azure 存储帐户使用托管标识和 C# 进行身份验证

问题描述

我正在尝试使用用户分配的托管标识对 Azure 存储帐户进行身份验证,但出现以下错误:

无法使用用户分配的托管标识对 Azure 存储进行身份验证...

之前,在 Azure 门户中,我提供了对存储帐户中托管标识的参与者访问权限。所有其他参数(AccountURL、容器名称和托管标识)都是正确的。我在await blobClient.UploadAsync

请在下面找到代码,

public class BlobStorageManager
{
    private BlobContainerClient blobContainerClient = null;

    public BlobStorageManager()
    {
        var accountURL = ConfigurationManager.AppSettings["AccountURL"].ToString();
        var containerName = ConfigurationManager.AppSettings["ContainerName"].ToString();
        var managedIdentity = ConfigurationManager.AppSettings["ManagedIdentity"].ToString();       

        var blobServiceClient = new BlobServiceClient(new Uri(accountURL), new ManagedIdentityCredential(managedIdentity));

        blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName);
    }

    public async Task<string> UploadFileToBlobAsync(string fileName, Stream fileData, string contentType)
    {
        try
        {
            BlobClient blobClient = blobContainerClient.GetBlobClient(fileName);

            var blobHttpHeaders = new BlobHttpHeaders()
            {
                ContentType = contentType
            };

            var blobUploadOptions = new BlobUploadOptions()
            {
                HttpHeaders = blobHttpHeaders
            };

            await blobClient.UploadAsync(fileData, blobUploadOptions).ConfigureAwait(false);

            return blobClient.Uri.AbsoluteUri;
        }
        catch (Exception ex)
        {
            throw (ex);
        }
    }

我正在使用 Azure.Identity 1.4.0 和 Azure.Storage.Blobs 12.10.0

我错过了任何步骤吗?请指教。

标签: c#asp.net-mvcazureazure-blob-storageazure-managed-identity

解决方案


贡献者角色不授予数据平面访问权限。它仅提供管理存储帐户资源本身的访问权限。

您需要将存储 Blob 数据参与者角色授予托管标识。这将为其提供数据访问权限。


推荐阅读