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

时间:2017-12-04 13:43:27

标签: azure asp.net-core azure-keyvault

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

必须在aspnetcore Configuration Builder中配置秘密,如下所示:

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(...)的调用?如果没有,那么接近这个的最接近的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

您只需在environement变量下的launchSettings.json中指定KeyVault网址即可。无需Azure CLI或AppAuthentication库。

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

见: