Я видел много примеров хранилища ключей Azure, используемых для получения секретов с использованием IConfiguration
, включая this и this , однако они в основном касаются просмотра секретов, а не операций типа CRUD.
Я пытаюсь использовать методы расширения IKeyVaultClient
, такие как GetSecretAsync
, описать здесь .Чтобы реализовать это, я использую удостоверение управляемой службы в Azure и выполнил следующие шаги (за пределами типовой конфигурации Azure):
- Создание общедоступного
IKeyVaultOps
интерфейса и KeyVaultOps
реализации общедоступного классасодержащий создание KeyVaultClient
.
KeyVaultOps.cs
public class KeyVaultOps : IKeyVaultOps
{
public KeyVaultClient GetKeyVaultClient()
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
return new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
}
}
Используйте DI для инъекции, где это необходимо:
Startup.cs
services.AddSingleton<IKeyVaultOps, KeyVaultOps>();
Страница бритвы:
private readonly IKeyVaultOps keyVaultOps;
private readonly IConfiguration configuration;
public TestPageModel(
IKeyVaultOps keyVaultOps,
IConfiguration configuration
)
{
this.keyVaultOps = keyVaultOps;
this.configuration = configuration;
}
public string Secret { get; set; }
public class TestPageModel : PageModel
{
public async Task OnGetAsync()
{
try
{
var vaultUrl = configuration["KeyVaultUrl"];
SecretBundle secretBundle = await keyVaultOps.GetKeyVaultClient().GetSecretAsync(vaultUrl, "TestSecret");
Secret = secretBundle.Value;
}
catch (Exception ex)
{
Secret = ex.Message;
}
}
}
Распознавание Мне на самом деле не нужноинтерфейс для правильной работы, я ищу предложения по двум вещам:
Есть ли лучший способ настроить свойство URL KeyVaultClient
, чем внедрение IConfiguration
на каждомкласс, мне нужна реализация?
Так как мой основной проект в любом случае имеет using
операторов для Microsoft.Azure.KeyVault
, есть ли способ избежать моей собственной реализации GetKeyVaultClient()
и просто использовать:
services.AddSingleton<IKeyVaultClient, KeyVaultClient>();
... вместе с необходимыми методами расширения?
ПРИМЕЧАНИЕ. Приведенная выше строка в Startup.cs
дает:
Ни один конструктор для типа 'Microsoft.Azure.KeyVault.KeyVaultClient' не может быть создан с использованием служб из контейнера служб и значений по умолчанию