通过托管身份c#访问AzureBlobStorage

时间:2020-09-07 06:50:44

标签: c# azure azure-blob-storage azure-managed-identity

我想知道是否没有使用c#和azure托管身份访问blobstorage的强制实现?

我知道可以通过不赞成使用的nuget程序包WindowsAzure.Storage 9.3.3来访问它,但是看起来新的Microsoft.Azure.Storage.Blob 11.2.1尚未实现此功能。 ..

我想念什么吗?

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:1)

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

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

有关Azure.Identity库的更多信息,请参见here