首页 后端开发 C#.Net教程 ASP.NET中Core优雅的在开发环境保存机密(User Secrets)的详解

ASP.NET中Core优雅的在开发环境保存机密(User Secrets)的详解

May 28, 2017 am 10:14 AM

这篇文章主要为大家详细介绍了ASP.NET Core如何优雅的在开发环境保存机密User Secrets,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前言

在应用程序开发的过程中,有的时候需要在代码中保存一些机密的信息,比如加密密钥,字符串,或者是用户名密码等。通常的做法是保存到一个配置文件中,在以前我们会把他保存到web.config中,但是在ASP.NET Core中,这一方式或许发生了改变,或者说你有更多多元化的方法, 以及更加优雅的的配置来设置或者保存这些机密资料。

起初我以为这个UserSecrets它并没有什么用,因为我有需要配置的地方我直接配置到appsetting.json文件中就可以了,直到一次开发过程中,我才感受到了它真正的用途。

目录

  • 用户机密介绍

  • 如何添加用户机密

  • 在应用程序中使用用户机密

  • 总结

用户机密介绍

有以下场景大家可以想一下在以前的代码中我们是怎么样处理的:

  • 需要保存一些和第三方网站对接的密钥,比如和 微信,微博站点使用的 appkey

  • 给每个开发人员配置不用的用户名密码来访问一些资源

  • 开发人员在开发过程中使用各自本机的数据库,如何配置数据库地址、账号和密码

假设说最后一项,每个开发要使用自己本机的数据库,你可能会说让每个人修改自己的web.config,在提交代码的时候不提交就行了。那么如果在web.config添加其他配置项的时候,显然不提交web.config文件不合理的。

现在,ASP.NET Core 提供了一种很优雅简洁的方式 User Secrets 用来帮助我们解决这个事情。

在新建一个 ASP.NET Core Web 应用程序的时候,会在 Startup.cs 文件中看到这样一段代码:


public Startup(IHostingEnvironment env) 
{
  .....

  if (env.IsDevelopment())
  {
    builder.AddUserSecrets();
  }
  
  builder.AddEnvironmentVariables();
}
登录后复制

project.json 文件中,会看到 User Secrets 相关的一些配置


{
  "userSecretsId": "aspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e"
  ...
  
  "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
  "Microsoft.Extensions.SecretManager.Tools": “1.0.0-preview2-final”
}
登录后复制

可以看到builder.AddUserSecrets这行代码,他是在开发环境才运行的。

userSecretsId是用来标识项目的User Secrets唯一性的,如果有两个项目需要使用不同的Secrets ,这就需要有不同的userSecretsId。

Microsoft.Extensions.SecretManager.Tools 主要是用来设置或者查看secrets的值。

如何添加用户机密

可以在命令行中使用命令来添加:

image

  • 切换命令行窗口到程序的运行目录, 输入 dotnet user-secrets -h ,来查看可以使用的命令

  • 使用 dotnet user-secrets list 列出所有的用户机密

  • 使用 dotnet user-secrets set WeChatAppKey "X3423FEED2435DD"设置一个用户机密,其中 WebChatAppKey 为键,后面的是值。

  • 然后使用dotnet user-secrets list来查看设置的键值对。

  • 然后我又设置了一个数据库的连接字符串进去。

以上是使用命令行的方式来设置用户机密,也可以使用 Visual Studio 2015代替命令行来做这项工作。

Visual Studio中,在Web项目上右键,可以看到一个 管理用户机密 的菜单:

image

点击打开时候,会出现一个secrets.json的文件,里面就是刚刚在命令行设置的键值对:

image

有些同学可能会问既然是存储到secrets.json,那么这个文件是在哪里呢?

secrets.json的存储位置?

在非Windows系统中,它的存储位置在

~/.microsoft/usersecrets//secrets.json

在Windows系统中,它的位置在

C:\Users\用户名\AppData\Roaming\Microsoft\UserSecrets\aspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e

可以看到,存储的上层文件夹就是project.json文件中的 userSecretsId 设定的值。

在应用程序中使用用户机密

要在应用程序中访问配置的用户机密,你需要保证project.json文件中存在依赖项:
Microsoft.Extensions.Configuration.UserSecrets 并且builder.AddUserSecrets()。

然后在Startup.cs文件中通过 Configuration 对象访问


public IConfigurationRoot Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
  var wechatKey = Configuration["WeChatAppKey"]
}
登录后复制

你可以使用DI来将用户机密映射到一个C#类文件,像这样

secrets.json


{
  "SecretsKeys":
  {
    WeCharAppKey:"xxejfwert3045",
    WeboAppKey:"35402345lkefgjlkdfg",
    .....
  }
}
登录后复制

SecretsKeysConfig.cs


public class SecretsKeysConfig
{
  public string WeCharAppKey { get; set;}
  
  public string WeboAppKey { get; set;}
  
  // ......
}
登录后复制

Startup.cs


public void ConfigureServices(IServiceCollection services)
{
  services.Configure<SecretsKeysConfig>(Configuration.GetSection("SecretsKeys"));
  
  // 其他代码
}
登录后复制

HomeController.cs


public class HomeController : Controller
{
  public SecretsKeysConfig AppConfigs { get; }
  public HomeController(IOptions<SecretsKeysConfig> appkeys)
  {
    AppConfigs = appkeys.Value;
  }

}
登录后复制

注意:如果你的appsetting.json文件中有和secrets.json文件中相同节点(冲突)的配置项,那么就会被secrets.json中的设置项给覆盖掉,因为 builder.AddUserSecrets()晚于 AddJsonFile("appsettings.json")注册, 那么我们可以利用这个特性来在每个开发人员的机器上重新设置数据库连接字符串了。

总结

以上,或许可以感受到微软在 ASP.NET Core 中对于开发人员还是非常贴心的,很多小细节都考虑到了,因此在我们构建应用程序的过程中,可以多使用这些小功能(特性)来让我们的代码更加的优雅~

以上是ASP.NET中Core优雅的在开发环境保存机密(User Secrets)的详解的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在 Windows 11 中启用 Core Isolation 的内存完整性功能 如何在 Windows 11 中启用 Core Isolation 的内存完整性功能 May 10, 2023 pm 11:49 PM

Microsoft的Windows112022Update(22H2)默认启用CoreIsolation的内存完整性保护。但是,如果您运行的是旧版本的操作系统,例如Windows112022Update(22H1),则需要手动打开此功能。在Windows11中开启CoreIsolation的内存完整性功能对于不了解核心隔离的用户,这是一个安全过程,旨在通过将Windows上的基本核心活动隔离在内存中来保护它们免受恶意程序的侵害。该进程与内存完整性功能相结合,可确保

电脑core是什么意思 电脑core是什么意思 Sep 05, 2022 am 11:24 AM

电脑中core有两种意思:1、核心,也即内核,是CPU最重要的组成部分,CPU所有的计算、接受存储命令、处理数据都由核心执行;2、酷睿,core是英特尔的处理器名称,酷睿是英特尔公司继奔腾处理器之后推出的处理器品牌,目前已经发布了十二代酷睿处理器。

如何修复 Windows 11 / 10 中的处理器热跳闸错误 [修复] 如何修复 Windows 11 / 10 中的处理器热跳闸错误 [修复] Apr 17, 2023 am 08:13 AM

大多数设备(例如笔记本电脑和台式机)长期被年轻游戏玩家和编码人员频繁使用。由于应用程序过载,系统有时会挂起。这使用户被迫关闭他们的系统。这主要发生在安装和玩重度游戏的玩家身上。当系统在强制关闭后尝试启动时,它会在黑屏上抛出一个错误,如下所示:以下是在此引导期间检测到的警告。这些可以在事件日志页面的设置中查看。警告:处理器热跳闸。按任意键继续。..当台式机或笔记本电脑的处理器温度超过其阈值温度时,总是会抛出这些类型的警告消息。下面列出了在Windows系统上发生这种情况的原因。许多繁重的应用程序在

.NET Core跨平台应用开发实战:从Windows到Linux与macOS的无缝之旅 .NET Core跨平台应用开发实战:从Windows到Linux与macOS的无缝之旅 Feb 26, 2024 pm 12:55 PM

随着.NETCore的推出,.NET开发者迎来了全新的机遇,可以在多个操作系统上轻松编写和运行.NET应用程序。本文将深入探讨如何利用.NETCore实现跨平台应用开发,并分享在Windows、Linux和macOS等操作系统上的最佳实践经验。一、准备开发环境要开始跨平台应用开发,首先需要为每个目标平台准备好开发环境。Windows在Windows上,你可以通过VisualStudio来安装.NETCoreSDK。安装完成后,你可以通过VisualStudio创建和运行.NETCore项目。Li

CORE币值得长期持有吗?CORE币值得投资吗? CORE币值得长期持有吗?CORE币值得投资吗? Feb 29, 2024 pm 05:34 PM

CORE币:值得长期持有吗?CORE币是一个基于工作量证明(PoW)共识机制的加密货币,由Core团队在2018年创立。其目标是建立一种安全、高效、可扩展的数字货币体系,被广泛应用于支付和价值储存。CORE币的设计旨在提供一种去中心化的支付解决方案,为用户提供更多的隐私保护和交易便利性。CORE币的优势安全:CORE币基于工作量证明共识机制,具有很强的安全性。高效:CORE币的交易速度快,每秒可处理数千笔交易。可扩展:CORE币的区块容量大,可支持大量交易。去中心化:CORE币是一个去中心化的加

在linux下core是什么 在linux下core是什么 Mar 23, 2023 am 10:00 AM

在linux下core是一个内存映像,同时加上调试信息;在linux下遇到程序异常退出或者中止,我们都会使用core文件进行分析,其中包含了程序运行时的内存、寄存器、堆栈指针等信息,格式为ELF,可以理解是程序工作当前状态转储成一个文件。

IFA 2024 | Core Ultra 系列 2:在 Lunar Lake 中,英特尔推出了迄今为止最高效的 x86 CPU IFA 2024 | Core Ultra 系列 2:在 Lunar Lake 中,英特尔推出了迄今为止最高效的 x86 CPU Sep 04, 2024 am 06:38 AM

在发布 Core Ultra Series 1(也称为 Meteor Lake)大约一年后,英特尔又推出了第二代产品。 Core Ultra 系列 2 又名 Lunar Lake 已在 6 月的 Computex 上推出。在 IFA 上,Core Ultr 最终发布

IFA 2024 | Core Ultra 系列 2:通过 Lunar Lake,英特尔推出迄今为止最高效的 x86 CPU IFA 2024 | Core Ultra 系列 2:通过 Lunar Lake,英特尔推出迄今为止最高效的 x86 CPU Sep 05, 2024 am 02:10 AM

在发布 Core Ultra Series 1(也称为 Meteor Lake)大约一年后,英特尔又推出了第二代产品。 Core Ultra 系列 2 又名 Lunar Lake 已在 6 月的 Computex 上推出。在 IFA 上,Core Ultr 最终发布

See all articles