Майкрософт.Azure.KeyVault.Модели.KeyVaultErrorException: ‘Операция вернула недопустимый код состояния ‘неверный запрос»

#c# #.net #azure #console-application #azure-keyvault

#c# #.net #azure #консольное приложение #azure-keyvault

Вопрос:

Я пытаюсь получить секреты от Azure KeyVault в консольном приложении .Net 4.5, я выполнил это туто , но я получил ошибку неправильного запроса, как указано в названии . Я должен упомянуть, что мое консольное приложение создано недавно, и я использую ClientID и clientSecret, которые принадлежат другому.Net core web api, этот api способен успешно получать секреты, но в моем консольном приложении это не так. Пожалуйста, ознакомьтесь ниже с кодом, который я использую, исключение генерируется по указанию клиента.GetSecretAsync(адрес хранилища, секретное имя):

 static void Main(string[] args)
    {
        Console.WriteLine($"Secret Value from Vault is: { GetVaultValue()}");
        //DoVault();

        Console.ReadLine();
    }
    static string GetVaultValue()
    {
        KeyVaultClient client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
        var vaultAddress = "https://VaultName.vault.azure.net/";
        var secretName = "storageName:NameAccount";
        var secret = client.GetSecretAsync(vaultAddress, secretName).GetAwaiter().GetResult();
        return secret.Value;
    }
    static async Task<string> GetToken(string authority, string resource, string scope)
    {
        var clientId = "This-IS-ID";
        var clientSecret = "THIS-iS-my-Secret";
        ClientCredential credential = new ClientCredential(clientId, clientSecret);
        var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
        var result = await context.AcquireTokenAsync(resource, credential);
        return result.AccessToken;
    }
  

Комментарии:

1. Эта ошибка возникает, если у вас нет правильных разрешений

2. KeyVaultClient устарел в пользу SecretClient, доступного в нашем новом пакете Azure. Безопасность. KeyVault. Секреты. Мы также разделили KeyClient и CertificateClient на отдельные пакеты. Смотрите aka.ms/valueprop и aka.ms/intro для получения дополнительной информации. Используется с DefaultAzureCredential из Azure. Удостоверяющий личность, они проще в использовании и не требуют изменений кода при переходе из среды разработки в производственную среду.

3. @Heath Как возможно использовать новые пакеты в проекте .net framework? Я получаю отсутствующие исключения dll (Azure. Ядро, система.Память и т.д.)

Ответ №1:

secretName Содержит двоеточие : , которое привело к этой ошибке.

На основании моего теста нам не разрешено включать двоеточие в имя хранилища ключей:

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

Пожалуйста, проверьте и исправьте это.

Ответ №2:

Для тех, кто все еще ищет альтернативное решение. У меня была такая же проблема. В моем случае истек срок действия Pfx. Та же ошибка возникает, когда пароль Pfx неверен или файл Pfx имеет недопустимый формат.

Если вы попытаетесь добавить его вручную в форму импорта azure KeyVault, возможно, вы получите эту ошибку:

Содержимое указанного сертификата PKCS #12 X.509 не может быть прочитано. Убедитесь, что сертификат находится в действительном формате PKCS # 12 и что отправленный пароль соответствует паролю экспорта сертификата.

Я сгенерировал новый файл Pfx с датой, не истекшей, и это решило проблему.