通过 Managed Identity c# 访问 AzureBlobStorage

Access AzureBlobStorage via Managed Identity c#

我想知道是否没有使用 C# 和 Azure 托管身份访问 blobstorage 的实际实现?

我知道可以通过已弃用的 nuget 包 WindowsAzure.Storage 9.3.3 访问它,但看起来新的 Microsoft.Azure.Storage.Blob 11.2.1 还没有这个功能实施...

我是不是漏了什么?

使用 Azure.Storage.Blobs 你可以这样做:

public class ManagedIdentityTokenCredentials : TokenCredential
{
    private const string Resource = "https://storage.azure.com/";
    private readonly string _tenantId;

    public ManagedIdentityTokenCredentials(string tenantId)
    {
        _tenantId = tenantId;
    }

    public override async ValueTask<AccessToken> GetTokenAsync(TokenRequestContext requestContext, CancellationToken cancellationToken)
    {
        var result = await new AzureServiceTokenProvider().GetAuthenticationResultAsync(Resource, _tenantId, cancellationToken: cancellationToken);
        return new AccessToken(result.AccessToken, result.ExpiresOn);
    }

    public override AccessToken GetToken(TokenRequestContext requestContext, CancellationToken cancellationToken)
    {
        return GetTokenAsync(requestContext, cancellationToken).GetAwaiter().GetResult();
    }
}

...

var blobServiceClient = new BlobServiceClient(new Uri($"https://{AccountName}.blob.core.windows.net"), new ManagedIdentityTokenCredentials(TenantId));

Azure.Identity 库具有 TokenCredential 抽象 class 的实现,可用于对 Azure.Storage.Blobs 库中的客户端进行身份验证。 ManagedIdentityCredential 可用于在启用托管标识的 Azure 主机上对客户端进行身份验证。

var blobServiceClient = new BlobServiceClient(new Uri($"https://{AccountName}.blob.core.windows.net"), new ManagedIdentityCredential());

可以找到有关 Azure.Identity 库的更多信息 here