#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 с датой, не истекшей, и это решило проблему.