Wou*_*ort 6 .net c# azure azure-storage azure-authentication
我正在尝试在 C# 中创建一个重新生成存储密钥的 Azure 函数。我正在努力寻找正确的 .NET 库,在其中我可以验证并重新生成密钥。
我发现进行身份验证的最简单方法是使用DefaultAzureCredentials并将它们传递给BlobClient. 但我在 上找不到重新生成密钥的选项BlobClient。
我发现在存储帐户上重新生成密钥的唯一方法是使用,Microsoft.Azure.Management.Fluent但 Fluent API 不支持DefaultAzureCredentials. 相反,我认为我需要使用SdkContext.AzureCredentialsFactory没有托管身份和 VS Code 的自动回退功能的工具DefaultCredentials。
BlobClient以便我可以使用吗DefaultAzureCredentials?DefaultAzureCredentials或者有没有办法与 Fluent API 一起使用?Mic*_*ner 11
这是我刚刚使用 .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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
来源和灵感:
更新:正如 Simon Opelt 在他们的评论中完全正确地指出的那样:对于长时间运行的流程(例如服务),令牌确实会过期,并且需要处理它们的续订。我的示例来自 Azure Function App,最多运行 10 分钟。
首先:是的,BlobClient(以及与之相关的整个 SDK)仅用于存储帐户的数据平面操作。然而,密钥轮换是管理平面操作。因此你是对的,你需要 Management SDK。
我不久前也在寻找这个,但找不到使用 DefaultAzureCrendtials 和 Fluent SDK 的方法。我重新开始使用 AzureServiceTokenProvider,它对我来说也完全正常:
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();
Run Code Online (Sandbox Code Playgroud)
如果您的目标是用户默认租户,IIRCtenantId 实际上是可选的。
| 归档时间: |
|
| 查看次数: |
2103 次 |
| 最近记录: |