我创建了一个运行运行Identity Server的容器的App Service。此容器需要我从Key Vault加载的证书。为了获得证书的内容,我所做的是:
在我的第一次尝试中,我只在App Settings中存储了秘密的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)));
如果我将代码部署到VM中,则此方法有效。但是,如果我将代码部署到运行容器的App Service中,则不会。所以我决定尝试使用Key Vault引用的另一个选项。所以,我已经创建了一个新的App Settings,如下所示:
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)));
但这也不起作用。
我已在App Service中启用了托管标识,并将其添加到密钥保管库中的访问策略中。
如何从Key Vault获取价值?有什么我想念的吗?
因此,错误是我添加新访问策略的方式。我正在选择主要ID和授权应用程序。事实证明,我只需要选择主体,将授权应用程序保留为“未选择”。