问题

如何在ASP.NET Core 2.0中保存机密配置项(不用将其暴露给源代码管理器)?

答案

创建一个ASP.NET Core 2.0空项目,在项目节点上点击右键,并点击菜单项 - 管理用户机密:

这将会打开secrets.json文件,添加配置键值对:

{"UserPassword": "Password1"
}

为此配置项添加POCO类:

public class SecretSettings
{public string UserPassword { get; set; }
} 

使用之前创建的HelloWorldMiddleware中间件,将IOptions<T>作为中间件的构造函数参数注入,其中T就是我们刚刚定义的POCO类:

public class HelloWorldMiddleware
{private readonly RequestDelegate _next;private readonly SecretSettings _settings;public HelloWorldMiddleware(RequestDelegate next, IOptions<SecretSettings> options){_next = next;_settings = options.Value;}public async Task Invoke(HttpContext context){var jsonSettings = JsonConvert.SerializeObject(_settings, Formatting.Indented);await context.Response.WriteAsync(jsonSettings);}
}public static class UseHelloWorldInClassExtensions
{public static IApplicationBuilder UseHelloWorld(this IApplicationBuilder app){return app.UseMiddleware<HelloWorldMiddleware>();}
}  

在Startup.cs中,我们需要做如下几件事:

1. 通过构造函数参数注入IConfiguration

2. 在ConfigureServices()中添加Options服务,并添加机密配置的依赖项

3. 在Configure()方法中使用中间件

public class Startup
{public static IConfiguration Configuration { get; private set; }public Startup(IConfiguration configuration){Configuration = configuration;}public void ConfigureServices(IServiceCollection services){services.AddOptions();services.Configure<SecretSettings>(Configuration);}public void Configure(IApplicationBuilder app, IHostingEnvironment env){app.UseHelloWorld();}
}  

运行,此时页面显示:

讨论

之前我们讨论过如何在配置文件中存储全局配置项。然而,这些配置文件会被签入源代码管理器,因此不适合用于保存机密配置。在生产环境中,这些配置可以保存到环境变量或者Azure云的密钥存储库中 。对于开发环境,ASP.NET Core 2.0提供了可选的解决方案:用户机密管理器。

用户机密管理器允许开发人员将机密信息保存到secrets.json文件中,而不会签入到源代码管理器。secrets.json文本被保存到系统的AppData目录中,在VS2017中你可以将鼠标移动到相应的选项卡上查看文件路径。需要注意的一点:机密信息是被保存在普通文本文件中的。这些文件是在创建WebHost时由运行时读取并加载的。

====start by sanshi=========================

你可能也注意到了用户机密文件路径中的那个类似GUID的字符串了,它是由VS 2017自动创建的,并存在工程文件中(SecretConfiguration.csproj):

<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>netcoreapp2.0</TargetFramework><UserSecretsId>2d08d295-6b15-46b3-a5a3-ad0b1992f492</UserSecretsId></PropertyGroup><ItemGroup><PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /></ItemGroup></Project>

====end by sanshi=========================

CLI

我们也可以使用命令行界面(CLI)的指令 dotnet user-secrets 来管理机密信息。为此,我们需要首先想工程文件中添加如下配置:

<ItemGroup><DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
</ItemGroup>  

接下来,我们就可以使用如下命令来管理用户机密信息:

1. list:列出所有的机密信息,例如:dotnet user-secrets list

2. set:添加或更新某个机密项,例如:dotnet user-secrets set SecretSetting “SecretValue”

3. remove:删除某个机密项,例如:dotnet user-secrets remove SecretSetting

4. clear:清空所有机密项,例如:dotnet user-secrets clear

====start by sanshi=========================

下面,我们会简单演示这一过程,首先打开命令行窗体(Windows+X),并定位到项目所在目录:

cd C:\Users\sanshi\Desktop\ASP.NET_Core_20_Articles\SecretConfiguration\SecretConfiguration

然后键入如下命令:

dotnet user-secrets list  

运行结果:

下面来修改这个机密项:

dotnet user-secrets set UserPassword "My New Password"

在VS中打开机密文件,发现已经修改成功:

{"UserPassword": "My New Password"
}

====end by sanshi=========================

源代码下载

原文:https://tahirnaushad.com/2017/08/31/asp-net-core-2-0-secret-manager/

[译]ASP.NET Core 2.0 机密配置项相关推荐

  1. ASP.NET Core 2.0 全局配置项

    问题 如何在 ASP.NET Core 2.0 应用程序中读取全局配置项? 答案 首先新建一个空项目,并添加两个配置文件: 1. appsettings.json { "Section1&q ...

  2. [译]ASP.NET Core 2.0 部分视图

    问题 如何在ASP.NET Core 2.0中使用部分视图来重用页面的公共部分? 答案 新建一个空项目,在Startup中添加MVC服务和中间件: public void ConfigureServi ...

  3. [译]ASP.NET Core 2.0 网址重定向

    问题 如何在ASP.NET Core 2.0中实现网址重定向? 答案 新建一个空项目,在Startup.cs文件中,配置RewriteOptions参数并添加网址重定向中间件(UseRewriter) ...

  4. [译]ASP.NET Core 2.0 带初始参数的中间件

    问题 如何在ASP.NET Core 2.0向中间件传入初始参数? 答案 在一个空项目中,创建一个POCO(Plain Old CLR Object)来保存中间件所需的参数: public class ...

  5. Amazing ASP.NET Core 2.0

    前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...

  6. ASP.NET Core 2.0 : 三. 项目结构

    ASP.NET Core 2.0 : 三. 项目结构 原文:ASP.NET Core 2.0 : 三. 项目结构 本章我们一起来对比着ASP.NET Framework版本看一下ASP.NET Cor ...

  7. .NET Core ASP.NET Core 1.0在Redhat峰会上正式发布

    众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项.这个团队已经一起工作好几个月了,RHEL对.NET有许多需求.今天在 ...

  8. diskgeniusv4.4.0_.NET Core 3.0及ASP.NET Core 3.0前瞻

    (给DotNet加星标,提升.Net技能) 转自:LineZerocnblogs.com/linezero/p/netcore3 前几天微软发布了< .NET Core 3.0 Preview ...

  9. ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现

    from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https ...

最新文章

  1. CoreAnimation动画
  2. 以KNN为例用sklearn进行数据分析和预测
  3. 结对编程Wordcount
  4. Mysqldump命令参数介绍
  5. C++设计模式-Facade模式
  6. Linux—目录文件属性和权限管理详解
  7. Android低功耗蓝牙(BLE)使用详解
  8. Numpy:通过算数运算取值、替换值
  9. 【AsyncTask整理 1】 AsyncTask几点要注意的地方
  10. 从你王者荣耀爱玩的英雄类型,我就知道你关注哪些技术领域!
  11. SpringMCV结构
  12. proteus8.6 示波器弹不出来?
  13. proDAD Mercalli 2020V5.0.461注册激活码版视频稳定防抖软件
  14. AndroidMPChart——BarChart
  15. linux c 开发 英文简历,软件工程师英文简历范文
  16. 华为新机预装鸿蒙,华为新机来了!预装鸿蒙OS,搭载麒麟9000
  17. 前序、中序、后序表达式
  18. 人工智能之经典逻辑推理
  19. Hbuilder快捷键教程
  20. 华为5g鸿蒙折叠,华为再次亮剑!5G新旗舰已经确认,折叠屏+升级到鸿蒙2.0,价格过万...

热门文章

  1. springmvc二十一:自定义类型转换器
  2. McAfee ENS
  3. vim学习、各类插件配置与安装
  4. 50个Android开发人员必备UI效果源码[转载]
  5. mysql-connector-net不同版本下载
  6. 项目经理常扮演的角色
  7. 10个经典而简单的jQuery特效设计在线演示
  8. 三种运动让身高增长4-10cm
  9. SQL Sever 子查询与嵌套查询
  10. python目录大纲