如何在.NET Core控制台应用程序中获得"管理用户秘密"?

40 .net-core asp.net-core-1.0 visual-studio-2017

当我创建一个新的ASP .NET Core Web -Application时,我可以在Visual Studio中右键单击该项目,然后我会看到一个名为"Manage User Secrets"的上下文菜单条目.

当我创建一个新的.NET Core Console -Application时,我没有看到这个上下文菜单条目.

但是,"Web" - 应用程序在项目设置中显示为"控制台"应用程序.有什么方法可以在控制台应用程序中获得此上下文菜单条目吗?

Gra*_*air 42

通过右键单击"管理用户机密"仅在Web项目中可用.

控制台应用程序的过程略有不同

它需要手动将所需元素键入csproj文件,然后通过PMC添加秘密

我在本博客文章中逐步概述了当前项目中对我有用的过程:

https://medium.com/@granthair5/how-to-add-and-use-user-secrets-to-a-net-core-console-app-a0f169a8713f

TL;博士

步骤1

右键单击项目,然后单击编辑projectName.csproj

第2步

<UserSecretsId>Insert New Guid Here</UserSecretsId>在Tar​​getFramework下添加到csproj中

<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0"/>在csproj中添加项目组

第3步

打开PowerShell(admin)cd到项目目录和

输入 dotnet user-secrets set YourSecretName "YourSecretContent"

这将创建一个secrets.json文件:

%APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json
Run Code Online (Sandbox Code Playgroud)

userSecretsId =您为csproj创建的新Guid

第4步

打开secrets.json并编辑看起来与此类似

{
 "YourClassName":{
    "Secret1":"Secret1 Content",
    "Secret2":"Secret2 Content"
   }
} 
Run Code Online (Sandbox Code Playgroud)

通过添加类的名称,您可以将您的秘密绑定到要使用的对象.

创建一个与您在JSON中使用的名称相同的基本POCO.

namespace YourNamespace
{
    public class YourClassName
    {
        public string Secret1 { get; set; }
        public string Secret2 { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

第5步

Microsoft.Extensions.Configuration.UserSecretsNuget包添加到项目中

var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddUserSecrets<YourClassName>()
.AddEnvironmentVariables();
Run Code Online (Sandbox Code Playgroud)

&

var services = new ServiceCollection()
.Configure<YourClassName>(Configuration.GetSection(nameof(YourClassName)))
.AddOptions()
.BuildServiceProvider();

services.GetService<SecretConsumer>();
Run Code Online (Sandbox Code Playgroud)

到您的Program.cs文件.

然后注入IOptions<YourClassName>你的类的构造函数

private readonly YourClassName _secrets;

public SecretConsumer(IOptions<YourClassName> secrets)
{
  _secrets = secrets.Value;
}
Run Code Online (Sandbox Code Playgroud)

然后通过使用访问秘密 _secrets.Secret1;

  • 为了帮助完成此步骤,我发布了Visual Studio Extensions for UserSecrets Management,称为“ Open UserSecrets”。希望对您有帮助。https://marketplace.visualstudio.com/items?itemName=guitarrapc.OpenUserSecrets (2认同)
  • 工作正常!两个注意事项: 1. DotNetCliToolReference 需要放置在其他包引用所在的 ItemGroup 中。2. 添加 GUID 和 DotNetCliToolReference 后,重新加载 csproj 文件 - 然后您可以右键单击它并选择“管理用户机密”,这将为您创建 Secrets.json 文件。只是一种替代方法,而不是使用控制台(例如,它也可以在测试项目中工作 - 在您按照描述编辑 csproj 文件之后)。最后,一个有用的链接:[读取用户机密](/sf/ask/3574345631/) (2认同)

小智 11

Dotnet Core 3.1 - 我在只需要隐藏密码的情况下发现的最简单的方法。
使用命令行从项目文件夹创建用户机密

dotnet user-secrets init
dotnet user-secrets set mailpassword password1
Run Code Online (Sandbox Code Playgroud)

在 Program.cs 中

var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
            
var secretProvider = config.Providers.First();
if (!secretProvider.TryGet("mailpassword", out var secretPass) ) return;
Run Code Online (Sandbox Code Playgroud)

如果您在配置方面做更多事情,您可能需要调整 .First()

  • 如果有人想查看有关如何完成此方法的官方文档:https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-5.0&amp;tabs=linux#秘密经理 (2认同)

Fre*_*son 8

1.添加到您的项目文件(仅限dotnet 2.1之前):

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
 </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

2.设置

 <PropertyGroup>
     <UserSecretsId>a random user id: manually add</UserSecretsId>
 </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
  1. 移至Package Manager Console中的迁移项目文件夹并添加一个键:值如:

    dotnet user-secrets set "ConnectionStrings:DefaultConnection" "xxxxx"
    
    Run Code Online (Sandbox Code Playgroud)

记得要在该项目的目录中(对于包管理器控制台,这意味着进入项目,而不是解决方案级别)


Rab*_*820 6

Manage User Secrets现在,一旦引用Microsoft.Extensions.Configuration.UserSecretsNuGet ,即可从Visual Studio 2019(在版本16.1.3中验证)的.NET Core控制台项目(不仅是ASP.NET Core项目)的上下文菜单中使用。

  • 经过测试后,对我来说(VS2019企业版v16.2)仅在添加软件包'Microsoft.Extensions.Configuration.UserSecrets'后出现 (2认同)
  • 在 16.4.4 中,该选项似乎对所有项目都可见,并会在必要时提示您安装软件包。感谢您的回答,@Rabadash8820! (2认同)

小智 -3

如何在 .NET Core 控制台应用程序中获取 \xe2\x80\x9cManage User Secrets\xe2\x80\x9d?

\n\n

使用带有更新 3 的 Visual Studio 2015 Community

\n\n
    \n
  1. 文件 -> 新建 -> 项目
  2. \n
  3. 选择控制台应用程序(.NET Core)
  4. \n
  5. 按 CTRL+ALT+L
  6. \n
  7. 单击项目以获取 \xe2\x80\x9cManage User Secrets\xe2\x80\x9d 它将打开 \na 名为 Secrets.json 的文件
  8. \n
\n\n

以及您可以手动输入用户密码的位置。

\n\n

我能够使用命令提示符来设置用户机密:

\n\n

c:\\Projects\\ConsoleApp2\\src\\ConsoleApp2>dotnet 用户密码设置 BrainTree_sandbox:商户 ID:9rv9mhnb5gh7nnyx

\n