我想在我的代码存储库之外的某个地方存储一个开发时秘密,开发人员可以在没有任何手动任务的情况下使用它。 (尽可能接近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(...)
的调用?如果没有,那么接近这个的最接近的解决方案是什么?
答案 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。
见: