Я создал службу приложений, в которой запущен контейнер с Identity Server.Этот контейнер нуждается в сертификате, который я загружаю из хранилища ключей.Чтобы получить содержимое сертификата, я сделал следующее:
В моей первой попытке я сохранил только URI секрета в настройках приложения и попытался получить значение, используя следующий код:
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var cert = keyVaultClient
.GetSecretAsync(
Env.GetString("CERTIFICATE_KEY_VAULT_KEY"))
.ConfigureAwait(false).GetAwaiter().GetResult();
identityServerBuilder.AddSigningCredential(new X509Certificate2(Convert.FromBase64String(cert.Value)));
Это работает, еслиЯ внедряю код в виртуальную машину. Но этого не происходит, если я внедряю код в службу приложений, на которой запущен контейнер. Поэтому я решил попробовать другой вариант - использовать ссылку на хранилище ключей. Итак, я создалновые настройки приложения, такие как:
CERTIFICATE_CONTENT = @Microsoft.KeyVault(SecretUri=https://mykeyvault.vault.azure.net/secrets/IdentityCert/5221036c6b734d5fa69cba29976a8592)
А затем просто используйте это значение внутри моего кода:
var certificateContent = Env.GetString("CERTIFICATE_CONTENT");
identityServerBuilder.AddSigningCredential(new X509Certificate2(Convert.FromBase64String(certificateContent)));
Но это тоже не работает.
I 'включили управляемую идентификацию в службе приложений и добавили ее в политики доступа в хранилище ключей.
Как получить значение из хранилища ключей? Есть ли что-то, чего мне не хватает?