Как исправить Microsoft.Azure.KeyVault.Models.KeyVaultErrorException: «Операция вернула недопустимый код состояния «NotFound»

Я пытаюсь получить значения из хранилища ключей Azure в приложении веб-API ASP.net 5. Но столкнулся с этой проблемой.

введите здесь описание изображения

Я добавил этот код в файл Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
        .ConfigureAppConfiguration((context, config) =>
        {
            var builtConfig = config.Build();
            var vaultName = builtConfig["keyvault"];

            var keyVaultClient = new KeyVaultClient(
                async (authoriy, resource, scope) =>
                {
                    var credential = new DefaultAzureCredential(false);
                    var token = credential.GetToken(
                            new TokenRequestContext(
                                new[] {"https://vault.azure.net/.default" }
                                )
                        );
                    return token.Token;
                });
            config.AddAzureKeyVault(
                vaultName,
                keyVaultClient,
                new DefaultKeyVaultSecretManager());
        });

В файле appsettings.json я указал URL-адрес хранилища ключей следующим образом.

"Keyvault": "https://<<vaultName>>.vault.azure.net/.default"

И я создал секрет с именем StorageConnectionString, который я использую в своем классе в хранилище ключей Azure.

public BlobContainerProvider(IConfiguration configuration) 
    {
        
        string connectionString = configuration.GetValue<string>("StorageConnectionString");

        blobServiceClient = new BlobServiceClient(connectionString);
    }

Заранее спасибо.


person Deepak paramesh    schedule 19.05.2021    source источник
comment
проверьте, помогает ли что-либо из этого "> stackoverflow.com/questions/51124843/   -  person Sajeetharan    schedule 19.05.2021
comment
@Sajeetharan, к сожалению, ни один из этих ответов мне не помог. Я уже просмотрел эти ответы, прежде чем опубликовать свой вопрос. Но не повезло.   -  person Deepak paramesh    schedule 19.05.2021
comment
Вы уверены, что у вас есть секрет с nae StorageConnectionString в хранилище ключей?   -  person Thomas    schedule 19.05.2021
comment
Ради интереса, где это размещается? IE AWS, служба приложений Azure, частное облако и т. д.   -  person blockingHD    schedule 19.05.2021
comment
@Thomas, да, у меня есть эта строка подключения в Keyvault.   -  person Deepak paramesh    schedule 19.05.2021
comment
@blockingHD, это будет размещено в службе приложений Azure.   -  person Deepak paramesh    schedule 19.05.2021
comment
У меня возникло бы искушение перейти к прямой реализации и использовать Ссылки на хранилище ключей. Обратите внимание, что это не ответ, а предложение для другого решения.   -  person blockingHD    schedule 19.05.2021
comment
Зачем ты это делаешь: "EventStoreKeyvault": "https://<<vaultName>>.vault.azure.net/.default"?   -  person Gaurav Mantri    schedule 20.05.2021
comment
@blockingHD, да, это хорошее предложение. Но это не совместимо с управляемыми удостоверениями.   -  person Deepak paramesh    schedule 20.05.2021
comment
@GauravMantri, «.default» было добавлено по ошибке, что удалило его из вопроса.   -  person Deepak paramesh    schedule 20.05.2021
comment
var vaultName = построенная конфигурация [keyvault]; зачем тебе это?   -  person Vova Bilyachat    schedule 20.05.2021
comment
Можете ли вы отредактировать свой вопрос и включить файл appSettings.json? Пожалуйста, запутайте названия ресурсов. Мне интересно увидеть значение параметра keyvault в вашем файле appSettings.json.   -  person Gaurav Mantri    schedule 20.05.2021


Ответы (1)


Я нашел проблему, на самом деле она находится в appsettings.json

Я упомянул это как

"Keyvault": "https://<<vaultName>>.vault.azure.net/.default"

При этом .default в URL ставить не следует.

Итак, как правило, такая ошибка возникает, если мы разместили недоступный URL-адрес хранилища ключей.

@Gaurav Mantri, спасибо, что указали на это в комментариях.

person Deepak paramesh    schedule 20.05.2021
comment
Большой! Я рад слышать, что ваша проблема решена. - person Gaurav Mantri; 20.05.2021