Убежище ключа Azure Недоступно перед Build () в приложении .NET 6 ContainerC#

Место общения программистов C#
Anonymous
 Убежище ключа Azure Недоступно перед Build () в приложении .NET 6 Container

Сообщение Anonymous »

setup
Я запускаю веб -приложение .NET 6 в приложении Azure Container и доступ к Key Vault Azure для секретов и строк соединения.
Внедрение зависимостей отлично подходит для инъекции моего пользовательского клиента Vault Cualt (обертка azure.security.keyvault.secrets.secretclient), и я могу успешно получить секреты после Build () (даже из программы .cs).
проблема
Мне нужно извлечь строку подключения из Ключевое хранилище перед Build (), чтобы я мог передать его конструктору услуг при регистрации зависимостей. Вызов secretClient.getSecret (KeyName) сбои на этом этапе. > Журналы
Когда приложение контейнера пытается активировать ревизию (и запускает программу. >

Что я Попробого

[*] Обеспечение управляемой идентификации правильно назначено приложению контейнера.
> < /p>
Как я могу надежно получить секрет перед вызовом Build () в веб -приложении .net 6?
или есть лучший шаблон для обработки этого сценария? < /p >
Любая идея была бы очень оценена!public class KeyVaultService : IKeyVaultService
{
private readonly SecretClient _secretClient;

public KeyVaultService(string keyVaultName)
{
_secretClient = new SecretClient(new Uri($"https://{keyVaultName}.vault.azure.net"), new DefaultAzureCredential());
}

public string GetSecret(string keyName)
{
KeyVaultSecret secret = _secretClient.GetSecret(keyName);
return secret.Value;
}
}

public class Program
{
public static void Main(string[] args)
{
WebApplicationBuilder? builder = WebApplication.CreateBuilder(args);
// ... configuring logging, etc ...

var keyVault = new KeyVaultService(keyVaultName);
// this is where it fails, but only in the Container app
// locally works fine.
string conn = keyVault.GetSecret("ConnectionString");

// registering a service that needs connectionString in its constructor.

var app = builder.Build();

// after Build() the Key Vault works fine.
keyVault = new KeyVaultService(keyVaultName);
conn = keyVault.GetSecret("ConnectionString");

// omitting unrelated code, like app.Run()
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... tainer-app

Вернуться в «C#»