我想在我的代码存储库之外的某个地方存储一个开发时间秘密,开发人员可以在没有任何手动任务的情况下使用。(接近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