如何在 ASP.net Core 2 的 appsettings.json 中加密密码?

2023-11-22

我想使用 appsettings.json 来存储“主密码”。

然后,该主密码将用于打开由这个出色的密码存储包生成的私钥(及其后续密码存储):https://github.com/neosmart/SecureStore

问题是,我想不出任何方法来加密主密码。我知道在 .NET 4.5 中,可以执行以下操作:

1) 将您的密码放入 web.config 文件中

2) 运行此脚本:aspnet_regiis.exe -pef appSettings "C:\myfolder"

3) 您的密码最终将被加密 - 但可以被您的程序安全地读取。

https://www.codeproject.com/Articles/599416/Encrypting-ASP-NET-Application-Settings

我是否以正确的方式处理这个问题,或者有更好的做法吗?


记住不要在主目录中存储秘密appsettings.json它位于网站中,通常保存在源代码管理中。使用文件提供程序将文件定位到服务器上其他位置的文件。

如果您有权访问 Azure,则可以将机密存储在Azure 密钥保管库代替appsettings.json.

考虑到这一点,如果您想使用 JSON 文件,您可以使用桥或代理类来处理值的解密。

首先,您需要一个类来解密这些值。为了简洁起见,我不会在这里详细介绍解密类,只是假设一个名为SettingsDecryptor已经编写并实现了一个名为ISettingsDecryptor使用单个方法 Decrypt 来解密字符串值。

桥接类有两个构造函数参数。

  • 第一个是IOptions<T> or IOptionsSnapshot<T>其中 T 是该部分所在的类appsettings.json绑定到通过services.Configure方法(例如MyAppSettings)。或者,如果您不想绑定到类,您可以使用IConfiguration相反,直接从配置中读取。
  • 第二个是解密类,实现ISettingsDecryptor.

在桥类中,每个需要解密的属性都应该使用解密类来解密配置中的加密值。

public class MyAppSettingsBridge : IAppSettings
{
    private readonly IOptions<MyAppSettings> _appSettings;

    private readonly ISettingsDecrypt _decryptor;

    public MyAppSettingsBridge(IOptionsSnapshot<MyAppSettings> appSettings, ISettingsDecrypt decryptor) {
        _appSettings = appSettings ?? throw new ArgumentNullException(nameof(appSettings));
        _decryptor = decryptor ?? throw new ArgumentException(nameof(decryptor));
    }

    public string ApplicationName => _appSettings.Value.ApplicationName;

    public string SqlConnectionSting => _decryptor.Decrypt(_appSettings.Value.Sql);

    public string OracleConnectionSting => _decryptor.Decrypt(_appSettings.Value.Oracle);
}

DI 容器应该设置如下:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddOptions();            
    services.Configure<MyAppSettings>(Configuration.GetSection("MyAppSettings"));
    services.AddSingleton(Configuration);        
    services.AddSingleton<ISettingsDecrypt, SettingsDecryptor>();
    services.AddScoped<IAppSettings, MyAppSettingsBridge>();
}

然后控制器可以有一个构造函数,将桥接器作为IAppSettings访问解密的设置。

上面的答案是整个解决方案的简要总结,因为需要相当多的代码。

完整详细的解释可以在我的博客文章中看到隐藏秘密appsettings.json– 在 ASP.Net Core 配置中使用桥(第 4 部分)我在其中详细描述了桥接模式的使用。 Github 上还有一个完整的示例(包括解密类):https://github.com/configureappio/ConfiguarationBridgeCrypto

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ASP.net Core 2 的 appsettings.json 中加密密码? 的相关文章

  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 增加超时时间

    我必须增加超时时间 以下是我的代码 Private Function GetConnectionInstance As SqlConnection Dim objConn As SqlConnection Dim strConnection
  • 在 DefaultHttpContext 上使用 FeatureCollection 时,响应对象为 null

    我正在测试一些 net Core 中间件 并希望使用整个 asp net Core http 管道来运行中间件 而不是模拟它 问题是 当我使用特征集合时 不知何故 响应对象没有在 httpRequest 中设置 并且它在请求本身上是只读的
  • 有哪些 API 可在 Windows 中使用 C# 配置扬声器设置?

    我环顾了很多不同的地方 但似乎找不到一个简单的方法来做到这一点 我在 Windows 7 中有多个声卡 并使用 HDMI 将声音输出到我的 AVR 放大器 我遇到的问题是 当放大器关闭时 它会导致窗口丢失扬声器配置 所以我想做的是编写一个小
  • .NET 中 IEqualityComparer 中 GetHashCode 的作用是什么?

    我试图了解 IEqualityComparer 接口的 GetHashCode 方法的作用 下面的例子取自MSDN using System using System Collections Generic class Example st
  • 使用 MapViewOfFile 有什么限制吗?

    我正在尝试将内存映射文件用作 hFile CreateFile State Path GENERIC READ FILE SHARE READ FILE SHARE WRITE 0 OPEN EXISTING FILE FLAG SEQUE
  • 编译器在函数名称前添加下划线前缀的原因是什么?

    当我看到 C 应用程序的汇编代码时 如下所示 emacs hello c clang S O hello c o hello s cat hello s 函数名称以下划线作为前缀 例如callq printf 为什么这样做以及它有什么优点
  • 在 Asp.Net 模板中转义内联代码块

    我有一个页面 我希望在其中呈现以下 html 一个小的 JS 模板 然而 Asp NET 预处理器正在拾取 我已经设法通过文字控件来做到这一点 并在后面的代码中设置它的文本 我理想地希望将其保留在 aspx 页面中 这是我能找到的最好的解决
  • 表单.位置不起作用

    我之前问过这个问题 以为我已经解决了 但它仍然不起作用 Form Show 稍微移动表单位置 https stackoverflow com questions 1214014 form show moves form position s
  • Windows Phone HttpClient PostAsync 挂起且无响应

    我在拨打电话时遇到问题HttpClientWP 应用程序的 post 方法 PostAsync总是挂起并且不给出任何响应 当我从 WPF 应用程序中尝试时 相同的代码可以工作 这是我正在做的事情 服务器Web API代码 public cl
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • 使用 Java 进行 AES 加密并使用 Javascript 进行解密

    我正在制作一个需要基于 Java 的 AES 加密和基于 JavaScript 的解密的应用程序 我使用以下代码作为基本形式进行加密 public class AESencrp private static final String ALG
  • 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

    我使用 Visual Studio 2017 使用 vcxproj 文件构建 C 桌面项目 我喜欢默认行为 其中输出目录是项目下面的子目录 例如 myproj sln myproj vcxproj x64 myproj release my
  • 在发送传出请求之前将新的 SoapClient 绑定到特定 IP 地址

    假设应用程序所在的计算机具有 SoapClient 具体来说 我正在使用 Microsoft Web Service3 Messaging SoapClient 它通过发送传出请求并获取 SoapEnvelope 作为回报 完善的流程 与远
  • 派生类的聚合初始化

    以下代码无法使用 Visual Studio2017 或在线 GDB 进行编译 我期望它能够编译 因为迭代器只是一个具有类型的类 并且它是从公共继承的 这是不允许的还是在 VS2017 中不起作用 template
  • 检测用户是否正在滚动 dataGridView 滚动条

    我正在更新一个dataGridView与一个新的数据表使用 dataGridView1 DataSource table 但是 我不想在用户滚动 dataGridView 时执行此操作 如何检查滚动条是否正在滚动或已完成滚动 即拖动而不是单
  • C# 记录类型:记录子类之间的相等比较

    给定父记录类型 public record Foo string Value 和两个记录子类Bar and Bee我想知道是否可以实施Equals在基类中 因此 Foo Bar 或 Bee 的实例都被考虑equal基于Value 两者都与E
  • iPhone 和服务器上的 3DES 加密不同

    我有以下代码用于加密发送到服务器的请求 服务器上的解码由 NET 完成 在 iPhone 上 我使用带有以下代码的安全框架 NSString doCipher NSString plainText CCOperation encryptOr
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma
  • “保留供任何使用”是什么意思?

    注意 这是一个c questions tagged c问题 虽然我补充说c questions tagged c 2b 2b如果某些 C 专家可以提供 C 使用与 C 不同的措辞的基本原理或历史原因 在 C 标准库规范中 我们有这个规范文本

随机推荐

  • 在 Html 页面中使用 Javascript 调用 Wcf 服务

    我在 VSStudio2012 中有一个 WCF 项目 我想从 JavaScript 函数调用一个方法 JavaScript 文件 var url http localhost 52768 Service1 svc function tes
  • 如何在 XNA 中逐像素绘制 2D?

    我正在尝试使用 XNA 在屏幕上逐像素绘制 但遇到资源问题 我认为最好的方法是使用 1 个纹理来更新每一帧 但我在更新它时遇到了麻烦 这是我到目前为止所得到的 只是作为测试 Texture2D canvas Rectangle traced
  • 在 Python 中使用 dbus 发送消息

    我有 2 个 Python 程序 我只想从一个向另一个发送一条消息 一长串 并且我想使用 dbus 现在 有没有一种简单的方法可以做到这一点 例如 如果消息非常小 我已经部分解决了将消息放在路径中的问题 但后来我不得不使用外部程序 dbus
  • 使用compareTo实现equals方法

    一般问题 当实现默认值的覆盖时equalsJava 中的方法 对于简单地使用已经实现的方法我应该担心什么compareTo方法 vs 将独立逻辑写入 equals 方法 我注意到有人在另一个问题中提到foo equals String nu
  • git 存储库克隆日志记录

    我希望监视 git 存储库中的克隆活动 但是我找不到任何显示如何设置或如何检索此信息的内容 这可能吗 如果是这样 如何设置以及如何检索日志记录信息 您可以使用post checkout用于更新服务器上的数据库或文件的钩子 该钩子在客户端运行
  • 模拟 ngrx 在单元测试中存储带有参数的选择器(Angular)

    我正在尝试为 Angular 中的服务编写单元测试 我想模拟 ngrx 的 store select 函数 这样我就可以测试服务如何对存储选择器返回的不同值做出反应 我希望能够单独模拟每个选择器 我的主要问题是如何模拟参数化选择器 我之前使
  • 使用 r 中的 ggplot2 编辑绘图工具提示中的标签

    我知道这个问题已经被问过很多次了 但我认为自从提出这些问题以来 plotly 的一些底层语法已经发生了变化 使用ggplotly 创建分区统计图会给出长 纬度 组的默认工具提示 以及我的美学变量之一 我知道工具提示仅映射美学内容 我想要做的
  • CLR 同步块地址

    当我做 public class Employee public int exp class Program static void Main string args Employee o1 new Employee o1 exp 3 lo
  • Three.js 中的内存泄漏

    我们正在尝试创建一个单页面应用程序 用户可以在其中在多个 Three js 应用程序之间切换 然而 我们注意到该选项卡的内存使用量不断增加 我们的应用程序中没有内存泄漏 并且 Three js 变量似乎没有从 RAM 中清除 重新创建的步骤
  • 在 IIS 中部署时打开内存映射文件会导致 FileNotFoundException

    以下代码示例来自this网站上 我创建了一个 Windows 控制台应用程序 用于创建映射内存文件 using var file MemoryMappedFile CreateNew myFile 24 var bytes new byte
  • 通过 webhook 触发 azure 管道?

    我想通过 Webhook 触发 Azure DevOps 管道 例如 我希望能够使用一些 JSON 向 Azure 上的某个端点发送 POST 然后让该端点触发要调用的管道 并向其传递 JSON 这可能吗 现在可在 Azure DevOps
  • 从符号链接获取真实路径 C#

    有谁知道如何从符号链接文件或文件夹中获取真实路径 谢谢你 大家好 经过我的研究 我找到了这个解决方案来获取符号链接的真实路径 如果您创建了符号链接并想检查该文件或文件夹的真实指针在哪里 如果有人有更好的写法请分享 DllImport ker
  • 如何为 ember.js 创建自定义适配器?

    我计划使用 ember js 但是我的 REST api 与打包的 REST 适配器并不完全一致 我想 覆盖 find 并能够将我自己的 ajax 放入其中 我不喜欢 ember findAll 在没有分页选项的情况下检索所有文档 因此与其
  • React 模式对话框的内容不可用于使用 mount() 的酶测试

    我有一个带有模式对话框的 React 组件 使用构建reactstrap 但其他人也报告了类似的问题react bootstrap和其他类型的模态组件 Enzyme 无法找到模态中的任何组件 即使它们在实际应用程序中呈现良好 最小的例子 i
  • 提高 R Rayshader 图像的分辨率

    我正在尝试使用 Rayshader 包制作图像 我很高兴能够使用如下代码创建 png 文件 library ggplot2 library rayshader example plot lt ggplot data frame x c 1
  • 如何在没有元类冲突的情况下将泛型类型与 PyQt 子类一起使用?

    我曾尝试过abc ABCMeta使用 sip 包装类型 并且当子类化时它工作得很好abc ABC class QABCMeta wrappertype ABCMeta pass class WidgetBase QWidget metacl
  • AngularJS - 在登录时存储基本身份验证

    我对此感到很头疼 我对 API 的使用还比较陌生 还没有做过任何需要身份验证的事情 我一直坚持向 API 发送 POST 请求 创建内容片段的端点是 entity node 如果我发送以下内容 我可以发送成功的 POST 请求 header
  • 将 dict 转储到 JSON 时保持顺序

    我想将数据库查询的结果序列化为 JSON 每行都有许多列 我添加到一个字典中 这些列按一定顺序排列 但是当我序列化数据时 顺序会发生变化 我尝试使用OrderedDict 但仍然看到同样的问题 如何保持列的顺序 res a i 0 b i
  • :[属性=值]的第n个子级(2n)

    我有一个包含行的列表 每一行li有一个属性data status其值可以是1 5 ul li li li li li li li li li li li li li li li li li li li li li li ul
  • 如何在 ASP.net Core 2 的 appsettings.json 中加密密码?

    我想使用 appsettings json 来存储 主密码 然后 该主密码将用于打开由这个出色的密码存储包生成的私钥 及其后续密码存储 https github com neosmart SecureStore 问题是 我想不出任何方法来加