我已经创建了一个正在运行容器运行身份服务器的应用程序服务。该容器需要我从钥匙库中加载的证书。要获取证书的内容,我所做的是:
- 将证书上传到密钥库中
- 访问键保管库的秘密端点的内容(https://mykeyvault.vault.azure.azure.net/secrets/indentitycert)
在我的第一次尝试中,我只是在应用程序设置中存储秘密的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中,则可以使用。但是,如果我将代码部署到运行容器的应用服务中,则不会。因此,我决定尝试另一种选择,即使用关键保险库参考物品。因此,我创建了一个新的应用程序设置:
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)));
但这也不起作用。
我启用了应用程序中的托管身份,并将其添加到密钥保险柜中的访问策略中。
如何从钥匙库中获取值?有什么我缺少的吗?
因此,错误是我添加新访问策略的方式。我正在选择授权应用程序的主要ID 和。事实证明,我只需要选择本金,而将授权的应用程序作为"无选择"。