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



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

必须在Aspnetcore配置构建器中配置秘密:

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

Aspnetcore团队的官方建议似乎是使用Secret Manager工具。但这要求每个开发人员都必须手动配置秘密。例如,他们必须为每个秘密运行dotnet user-secrets set key value

我看的第二件事是Azure KeyVault。这似乎是理想的,因为我只需要致电builder.AddAzureKeyVault(...)。唯一的问题是我必须存储clientId和clientsecret以访问密钥vault的某个地方。

理想情况下,我想要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-indistity

在@juunas上扩展他的答案:Visual Studio 15.5刚刚发布,这使它变得更加容易。如果您已经从Visual Studio登录到Azure帐户(并且您已经在预览Azure Services Authentication Extension中安装了当前的帐户),Visual Studio将简单地照顾Azure KeyVault身份验证。

您只需要在环境变量下指定launchSettings.json中的键VOVALT URL即可。无需使用Azure CLI或AppAuthentication库。

这甚至可以在完整的.NET框架上使用,而不仅仅是ASP.NET Core。

请参阅:

  • 一般:https://blogs.msdn.microsoft.com/visualstudio/2017/11/17/managing-secrets-secrets-secreths-secrelely-in-in-the-cloud/
  • asp.net核心示例:https://github.com/cawams/aspnetcore-msi-keyvault

最新更新