我有一个ASP.NET Core 2.0应用程序,我可以正常使用用户机密。但是,我无法在Azure WebJobs应用程序或基本的Windows控制台应用程序(两者都是.NET 4.6.1)中使用它。我已经为Microsoft.Extensions.Configuration.AddSecrets添加了nuget,并且在代码中编译了AddUserSecrets方法。
但是,我无法将用户密钥添加到项目中。在ASP.Net Core 2.0应用程序上,项目上的右键单击上下文菜单中没有“管理用户秘密”选项。所以我尝试使用命令行中的dotnet用户机密(我在ASP.NET Core 2.0应用程序中成功使用过)。当我收到此错误时,它无法正常工作。
No executable found matching command "dotnet-user-secrets"
从阅读其他帖子看起来我需要拥有Microsoft.Extensions.SecretManager.Tools。我无法通过nuget添加此内容,因为我收到此错误:
所以我添加了:严重性代码描述项目文件行抑制状态 错误包' Microsoft.Extensions.SecretManager.Tools 2.0.0'有一个包类型' DotnetCliTool'项目不支持xxx'。 0
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
</ItemGroup>
到csproj并尝试恢复包。此时我收到另一个错误:
C:\Program Files\dotnet\sdk\2.0.0\NuGet.targets(102,5): error : Value cannot be null.\r [C:\...\xxx.csproj]
C:\Program Files\dotnet\sdk\2.0.0\NuGet.targets(102,5): error : Parameter name: key [C:\...\xxx]
所以现在我想知道用户机密是否支持.NET 4.6.1项目。如果是的话,我错过了什么?
编辑:我从ASP.NET Core 2.0应用程序中追踪了secrets.json,并将其复制到适合此控制台应用程序的新创建的文件夹中,并正确选取了用户密码。因此从使用的角度看它似乎正常工作。我遇到的问题实际上是以方便的方式设置秘密。答案 0 :(得分:0)
根据Microsoft.Extensions.SecretManager.Tools依赖关系,你会发现该工具现在只支持net core,不支持.net 4.6。
此外,根据此article,您会发现此工具仅用于开发环境。
最重要的一点是,您不应该将密码或其他敏感数据存储在源代码中,并且您不应该在开发和测试模式下使用生产机密。
如果您想在azure webjobs中使用它,我建议您考虑使用Azure Key Vault。
Secret Manager工具仅用于开发。您可以使用Microsoft Azure Key Vault配置提供程序保护Azure测试和生产机密。有关详细信息,请参阅Azure Key Vault配置提供程序。
此外,如果你仍然想使用Microsoft.Extensions.SecretManager,我们可以使用.net core来创建azure webjobs。关于如何创建它,您可以参考此answer。