当前位置: 首页 > news >正文

.net core 管理用户机密

前言

书接上文,链接 https://blog.csdn.net/u012869793/article/details/141893020
我们自定义了一个配置系统,可以读取appsetting.json文件,一般情况下这个文件是需要上传到版本管理工具里的,可以是自建的gitlab,还可以上传到github或者gitee。那么问题就来了,有些配置文件比较机密,比如存放了一些数据库地址,用户名密码亦或是第三方服务的密钥等,而这些东西不希望上传到别的地方。我只想本地使用。那么如何最简单的实现这个需求呢?

开始实战

我们右键点击项目。可以看到有一个选项叫做管理用户机密,
[这里是图片]

点击之后会自动安装一个名为Microsoft.Extensions.Configuration.UserSecrets依赖包,然后会自动打开一个加载json的文件。然后我在这里接着输入比较机密的配置信息。如下。

{"Address": "192.168.0.1"
}

然后在我们上篇文章中所新建的扩展类ConfigExtension里,修改如下。

using Microsoft.Extensions.Configuration;namespace 自定义配置系统
{public static class ConfigExtension{public static IConfigurationRoot UseLmConfig(this IConfigurationBuilder builder){var configBuilder = new ConfigurationBuilder();configBuilder.Add(new LmConfigSource() { Path="appsetting.json" });//管理机密配置信息configBuilder.AddUserSecrets<LmConfigSource>();return configBuilder.Build();}}
}

然后我在运行一下。
[这里是图片]

可以看到已经读取到新的配置下的Address信息了。功能搞好了,那么原理呢?这里就引出了两个问题。

  1. 添加用户机密之后,怎么就机密了呢?这个新的配置文件会被上传到版本管理工具里吗?
  2. 现在有多个配置源了,那么以哪个配置源的信息为准呢?
首先第一个问题

使用管理用户机密功能之后,系统会自动创建一个名为secrets.json的配置文件,我们鼠标放到标签页上,右键选择打开所在的文件夹,可以看到文件是在C盘。C:\Users\lm\AppData\Roaming\Microsoft\UserSecrets\9f7938f4-1169-48f6-8794-5bea296149fa这个文件夹下,并没有和项目在同一个目录下,也就不会被项目的版本管理工具监测到了,不会被上传了。其中文件路径后面的ID可以在项目配置文件里看到。

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net8.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable><UserSecretsId>9f7938f4-1169-48f6-8794-5bea296149fa</UserSecretsId></PropertyGroup></Project>

有一个UserSecretsId的节点。这样对于一些特殊的机密信息,我们就可以单独放到这个文件里保存,当然这里仅仅只是仅对开发环境,生产环境该怎么配置还怎么配置就行。

第二个问题

当我们有多个配置源的时候,.net core 会自动以最后一次读取到的数据为准,所以配置源的加载顺序也是重要的。如果我现在把配置读取修改为这样。

 public static IConfigurationRoot UseLmConfig(this IConfigurationBuilder builder){var configBuilder = new ConfigurationBuilder();//管理机密配置信息configBuilder.AddUserSecrets<LmConfigSource>();configBuilder.Add(new LmConfigSource() { Path="appsetting.json" });return configBuilder.Build();}

那么就是先读取机密信息secrets.json,在读取appsetting.json,如果在两个文件中都配置了相同属性的信息,那么按这个顺序配置就以appsetting.json读取到为准了。如果不存在相同属性的信息,那么读取配置文件的顺序其实无所谓的。反正都是以最后一次读取到的属性的值为准。

结语

感谢您花时间阅读这篇文章,希望这些知识能为您的技术之旅增添一份力量。明天会更好!

Study hard and make progress every day.

欢迎关注下方微信公众号,一起学习,一起娱乐,一起进步,点击卡片可以查看公众号二维码哟。

相关文章:

  • 加密技术.
  • 编程式路由跳转
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • 基于微信的热门景点推荐小程序的设计与实现(论文+源码)_kaic
  • Java设计模式之装饰器模式详细讲解和案例示范
  • Springboot3.x.x使用SpringSecurity6(一文包搞定)
  • 【数据分析预备】Numpy入门
  • 【STM32】GPIO翻转操作实现流水灯
  • C#上位机使用Microsoft.Office.Interop.Excel和EPPlus库对Excel或WPS表格进行写操作
  • 外包服务商靠谱吗?一文教你火眼金睛辨真相
  • Etherpad在线文档协作编辑工具
  • 【IOS兼容】IOS/IE new Date() 返回结果为invalid date
  • 微信支付商家转账到零钱:快速开通攻略及功能全解
  • 探索前沿科技:在本地系统上安装和使用Style TTS2进行高质量语音合成
  • word宏的概念
  • (三)从jvm层面了解线程的启动和停止
  • Android Studio:GIT提交项目到远程仓库
  • css布局,左右固定中间自适应实现
  • Hibernate最全面试题
  • Map集合、散列表、红黑树介绍
  • 初识 webpack
  • 搞机器学习要哪些技能
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 每天一个设计模式之命令模式
  • 前嗅ForeSpider采集配置界面介绍
  • 如何设计一个比特币钱包服务
  • 少走弯路,给Java 1~5 年程序员的建议
  • 微信小程序实战练习(仿五洲到家微信版)
  •  一套莫尔斯电报听写、翻译系统
  • ​520就是要宠粉,你的心头书我买单
  • # 安徽锐锋科技IDMS系统简介
  • #NOIP 2014#Day.2 T3 解方程
  • #stm32驱动外设模块总结w5500模块
  • (~_~)
  • (1)(1.11) SiK Radio v2(一)
  • (7)摄像机和云台
  • (9)STL算法之逆转旋转
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二)测试工具
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (蓝桥杯每日一题)love
  • (全注解开发)学习Spring-MVC的第三天
  • (四)汇编语言——简单程序
  • (一)Docker基本介绍
  • (转)http协议
  • (转)Sublime Text3配置Lua运行环境
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net的socket示例
  • .NET多线程执行函数
  • @Async 异步注解使用