C# 如何在Azure Fluent中使用AzureDefaultCredentials?
我试图在C#中创建一个Azure函数,用于重新生成存储密钥。我正在努力找到正确的.NET库,在那里我可以验证和重新生成密钥 我发现的最简单的身份验证方法是使用C# 如何在Azure Fluent中使用AzureDefaultCredentials?,c#,.net,azure,azure-storage,azure-authentication,C#,.net,Azure,Azure Storage,Azure Authentication,我试图在C#中创建一个Azure函数,用于重新生成存储密钥。我正在努力找到正确的.NET库,在那里我可以验证和重新生成密钥 我发现的最简单的身份验证方法是使用DefaultAzureCredentials并将其传递给BlobClient。但是我在BlobClient上的任何位置都找不到重新生成密钥的选项 我发现在存储帐户上重新生成密钥的唯一方法是使用Microsoft.Azure.Management.Fluent,但Fluent API不支持DefaultAzureCredentials。相反
DefaultAzureCredentials
并将其传递给BlobClient
。但是我在BlobClient
上的任何位置都找不到重新生成密钥的选项
我发现在存储帐户上重新生成密钥的唯一方法是使用Microsoft.Azure.Management.Fluent
,但Fluent API不支持DefaultAzureCredentials
。相反,我认为我需要使用SdkContext.AzureCredentialsFactory
,它没有DefaultCredentials
所具有的对托管标识和VS代码的自动回退功能
- 是否有某种方法可以使用
重新生成密钥,以便我可以使用BlobClient
DefaultAzureCredentials
- 或者有没有一种方法可以将
与Fluent API一起使用DefaultAzureCredentials
var tenantId = Environment.GetEnvironmentVariable("tenantId");
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var token = await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com", tenantId);
var tokenCredentials = new TokenCredentials(token);
log.LogInformation("Got AAD token. Creating Azure client");
var azure = Microsoft.Azure.Management.Fluent.Azure
.Configure()
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
.Authenticate(new AzureCredentials(tokenCredentials, tokenCredentials, tenantId, AzureEnvironment.AzureGlobalCloud))
.WithDefaultSubscription();
如果您以用户默认租户为目标,IIRC tenantId实际上是可选的。这是我刚刚开始使用.NET 5.0的另一个变体。它使用DefaultAzureCredential并将其转换为AzureCredentials实例。作为测试,它然后查询默认订阅中的ACR实例列表并打印它们的名称。如果您正在使用一个或多个已支持DefaultAzureCredential的其他库,则此变体非常有用
using System;
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Management.ResourceManager.Fluent;
namespace Program
{
class Program
{
static void Main(string[] args)
{
var defaultCredential = new DefaultAzureCredential();
var defaultToken = defaultCredential.GetToken(new TokenRequestContext(new[] { "https://management.azure.com/.default" })).Token;
var defaultTokenCredentials = new Microsoft.Rest.TokenCredentials(defaultToken);
var azureCredentials = new Microsoft.Azure.Management.ResourceManager.Fluent.Authentication.AzureCredentials(defaultTokenCredentials, defaultTokenCredentials, null, AzureEnvironment.AzureGlobalCloud);
var azure = Microsoft.Azure.Management.Fluent.Azure.Configure().Authenticate(azureCredentials).WithDefaultSubscription();
var acrList = azure.ContainerRegistries.List();
foreach (var acr in acrList)
{
Console.WriteLine(acr.Name);
}
}
}
}
来源和灵感: