asp.net PROD 中的秘密

asp.net secrets in PROD

我一直在使用新的 .net 4.7.1 功能在 DEV 中本地管理机密,但现在我想发布我的 Web 应用程序,当然这在 PROD 中不起作用。

我正在使用服务主体访问我的应用程序中的 Azure 密钥保管库,并将应用程序 ID 和密码存储在本地机密文件中。我当然可以将所有机密存储在 Key Vault 中,但我仍然需要首先向它提供服务主体详细信息以连接到它。

最好的选择是什么?

您需要在应用程序的应用程序设置中存储用于打开密钥保管库的值。如果您的生产环境是 Azure,您可以访问应用程序的 App 设置并在那里进行设置。

阅读 this 文章以了解全貌。但要点是,您可以在 Azure 密钥值中使用应用程序机密,然后使用应用程序设置来存储凭据,以便稍后访问该密钥库。

您可以使用托管身份,这样您就不必在应用中存储任何秘密:

How to use managed identities for App Service and Azure Functions

配置后,添加对这些 nuget 包的引用:Microsoft.Azure.Services.AppAuthentication and Microsoft.Azure.KeyVault

在您的应用程序中,您可以像这样访问密钥保管库机密:

using Microsoft.Azure.KeyVault;
using Microsoft.Azure.Services.AppAuthentication;

...

var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
     new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync(
    "https://{{my-vault-name}}.vault.azure.net/", "{{my-secret}}");