在 aspnetcore 应用程序中共享开发秘密的最简单方法

Easiest way to share development secrets in aspnetcore application

我想在我的代码存储库之外的某个地方存储一个开发时秘密,开发人员无需任何手动任务即可使用它。 (接近 Build, Run, and it will just work)。

必须像这样在 aspnetcore 配置生成器中配置机密:

var builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json";
builder.AddDevelopmentSecrets(...);

aspnetcore 团队的官方推荐似乎是使用Secret Manager Tool。但这需要每个开发人员手动配置机密。例如,他们必须 运行 dotnet user-secrets set key value 每个秘密。

我看的第二件事是 Azure KeyVault。这看起来很理想,因为我只需要调用 builder.AddAzureKeyVault(...)。唯一的问题是我必须存储 clientId 和 clientSecret 才能在某处访问 keyvault。

理想情况下,我想要 AWS Toolkit for Visual Studio 扩展所做的事情。安装扩展程序后,您只需使用您的 AWS 凭证登录,扩展程序只需将您的凭证注入到使用的每个官方 AWS 调用中。

Azure 有这样的东西吗?允许我注入(或访问)我的 Azure 凭据的东西,以便它们可以用于对 AddAzureKeyVault(...) 的调用?如果不是,最接近这个的解决方案是什么?

Azure AD 托管服务标识可以提供帮助。根据我的建议实现:

var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
    new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback)); 
builder.AddAzureKeyVault("https://x.vault.azure.net/", keyVaultClient, new DefaultKeyVaultSecretManager());

现在您可以登录到 Azure CLI 2.0,这些凭据将自动用于访问 KeyVault。

您可以在此处阅读有关 MSI 的更多信息:https://joonasw.net/view/azure-ad-managed-service-identity

为了扩展@juunas 他的回答:Visual Studio 15.5 刚刚发布,这使得这更容易。如果您从 Visual Studio 登录到您的 Azure 帐户(并且您已经安装了当前预览版 Azure Services Authentication Extension),Visual Studio 将只负责 Azure KeyVault 身份验证。

您只需要在环境变量下的launchSettings.json中指定KeyVaulturl即可。不需要 Azure CLI 或 AppAuthentication 库。

这甚至适用于完整的 .NET Framework,而不仅仅是 ASP.NET Core。

参见: