在 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。
参见:
我想在我的代码存储库之外的某个地方存储一个开发时秘密,开发人员无需任何手动任务即可使用它。 (接近 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。
参见: