asp.netcore中如何加密configuration?(代码片段)

dotNET跨平台 dotNET跨平台     2022-12-23     719

关键词:

咨询区

  • Ovi

web.config 已进入历史垃圾堆,请问现在的 asp.net core 如何更好的做到将敏感信息(password,token) 存储到 configuration 中?

换句话说:是否可以自动化解密 appsettings.json 中的 configuration p 节中加密的内容。

回答区

  • CoderSteve

要想保护隐私,最好的方式就是将密文放置在 appsettings.json 中,那如何让程序自动化解密在 appsetting.json 中的密文呢?通常有两种做法。

  1. 继承并实现 ConfigurationProvider, IConfigurationSource

这种方式太麻烦,我就不演示了。

  1. 重写 JsonConfigurationProvider 方法

这种方式相对简单,重写它的 Load 方法并实现解密逻辑,参考如下代码。


public class JsonConfigurationProvider2 : JsonConfigurationProvider

    public JsonConfigurationProvider2(JsonConfigurationSource2 source) : base(source)
    
    

    public override void Load(Stream stream)
    
        // Let the base class do the heavy lifting.
        base.Load(stream);

        // Do decryption here, you can tap into the Data property like so:

         Data["abc:password"] = MyEncryptionLibrary.Decrypt(Data["abc:password"]);

        // But you have to make your own MyEncryptionLibrary, not included here
    


public class JsonConfigurationSource2 : JsonConfigurationSource

    public override IConfigurationProvider Build(IConfigurationBuilder builder)
    
        EnsureDefaults(builder);
        return new JsonConfigurationProvider2(this);
    


public static class JsonConfigurationExtensions2

    public static IConfigurationBuilder AddJsonFile2(this IConfigurationBuilder builder, string path, bool optional,
        bool reloadOnChange)
    
        if (builder == null)
        
            throw new ArgumentNullException(nameof(builder));
        
        if (string.IsNullOrEmpty(path))
        
            throw new ArgumentException("File path must be a non-empty string.");
        

        var source = new JsonConfigurationSource2
        
            FileProvider = null,
            Path = path,
            Optional = optional,
            ReloadOnChange = reloadOnChange
        ;

        source.ResolveFileProvider();
        builder.Add(source);
        return builder;
    


有了它,然后就可以在 CreateHostBuilder 时进行配置。


        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration(config =>
            
                config.AddJsonFile2("xxx.appsettings", true, true);
            )
            .ConfigureWebHostDefaults(webBuilder =>
            
                webBuilder.UseStartup<Startup>();
            );

点评区

其实在很早的时候我一直不理解这种做法,既然要放在配置文件中为啥还要加密起来,在平时开发的时候给自己带来了诸多不便,为此我还写了一篇文章 配置文件中的数据库连接串加密了,你以为我就挖不出来吗? 来聊这个问题,我可以直接用 windbg 到进程里拿明文字符串,毕竟最后的 SqlCommand 需要明文去连接数据库哈,只能说这种防君子不防小人。

ASP.NET Core 中的加密配置

】ASP.NETCore中的加密配置【英文标题】:EncryptedconfigurationinASP.NETCore【发布时间】:2016-07-0322:13:45【问题描述】:随着web.config的消失,在使用ASP.NETCore构建的Web应用程序的配置中存储敏感信息(密码、令牌)的首选方式是什么?... 查看详情

asp.netcore中的缓存[1]:如何在一个asp.netcore应用中使用缓存

.NETCore针对缓存提供了很好的支持,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中。对于分布式缓存,.NETCore提供了针对Redis和SQLServer的原生支持... 查看详情

asp.netcore1.x/asp.netcore2.0中如何加载多个配置文件

写这篇文章,来简单的谈一下,asp.netcore中,如何加载多配置文件,如有错误请斧正。在1.x的时候,我们是自己配置WebHostBuilder而在2.0的时候,efcore团队,将配置写到了一个CreateDefaultBuilder,这是一个预配置,人家为了方便做的。... 查看详情

asp.netcore依赖注入高级玩法——如何注入多个服务实现类

...文地址:https://www.bbsmax.com/A/nAJvbK0nJr/ 依赖注入在ASP.NETCore中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来。服务类型的实例转由容器自动管理,无需我们在代码中显式处理... 查看详情

asp.netcore依赖注入高级玩法——如何注入多个服务实现类(代码片段)

依赖注入在ASP.NETCore中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来。服务类型的实例转由容器自动管理,无需我们在代码中显式处理。因此,有了依赖注入后,你的编程思维... 查看详情

3.netcore笔试题(代码片段)

1.什么是ASP.NETCore?2.ASP.NETCore中AOP的支持有哪些?3.ASP.NETCoreFilter的注册方式有哪些?4.ASP.NETCoreFilter如何支持依赖注入?5.ASP.NETCore如何和读取配置文件中的内容?6.ASP.NETCore有哪些好的功能?7.ASP.NETCore跟ASP.NET比较有哪些更好的地方... 查看详情

如何在 Rider IDE 中更改 SDK 版本 asp netcore?

】如何在RiderIDE中更改SDK版本aspnetcore?【英文标题】:HowtochangeSDKversionaspnetcoreinRiderIDE?【发布时间】:2021-11-2722:10:00【问题描述】:创建asp.netcore时如何将sdk版本从6更改为5该选项显示为禁用我安装了netcore3.1、sdk5和sdk6感谢您的... 查看详情

如何在 ASP.NET Core 中使用区域

】如何在ASP.NETCore中使用区域【英文标题】:HowtouseanAreainASP.NETCore【发布时间】:2016-07-3120:05:14【问题描述】:如何在ASP.NETCore中使用Area?我有一个需要管理部分的应用。此部分要求将其视图放置在该区域中。所有以Admin/开头的... 查看详情

如何在 ASP.net Core 中添加 js 和 css 文件?

】如何在ASP.netCore中添加js和css文件?【英文标题】:HowtoaddjsandcssfilesinASP.netCore?【发布时间】:2016-10-0319:35:44【问题描述】:我被分配将应用程序从MVC迁移到ASP.netCore,我是ASP.netCore的新手。在MVC中我们有BundleConfig.cs并在其中添... 查看详情

asp.netcore中如何针对一个使用httpclient对象的类编写单元测试(代码片段)

原文:ASP.NETCore中如何针对一个使用HttpClient对象的类编写单元测试原文地址:HowtounittestaclassthatconsumesanHttpClientwithIHttpClientFactoryinASP.NETCore?作者:AnthonyGiretti译者:LamondLu介绍#几年前,微软引入了HttpClient类来替代HttpWebRequest来发送We 查看详情

如何在 asp.net Core 中增加最大线程池限制

】如何在asp.netCore中增加最大线程池限制【英文标题】:howtoincreasemaxThreadPoolLimitinasp.netCore【发布时间】:2020-07-1821:51:11【问题描述】:如何增加ASP.NETCore中的最大线程池限制,默认值是多少?你能举个例子吗?我知道在ASP.NET中... 查看详情

asp.netcore中如何通过authorizeattribute做自定义验证?(代码片段)

咨询区jltrem:我想在ASP.NETCore中用authorization特性实现一个自定义验证,在之前的版本中,我可以用系统提供的boolAuthorizeCore(HttpContextBasehttpContext)方法,但在这个版本中已经没有该方法了。请问当前我该如何实现这... 查看详情

如何在asp.netcore中获取客户端ip?(代码片段)

...ables["REMOTE_ADDR"]来获取客户端IP地址,请问在ASP.NETCore中我该如何实现呢?回答区CodingYourLife如果你用的是.NET5,可以用内部提供的扩展方法来实现获取客户端IP,参考代码如下ÿ 查看详情

asp.netcore中如何设置ip白名单(代码片段)

咨询区MartinM:我想在一个web站点中实现ip白名单功能,在MVC时代我只需要在web.config中添加如下配置即可。<security>  <ipSecurity allowUnlisted="false" denyAction="NotFound">    <add allowed 查看详情

如何在 ASP.NET Core 2.0 中根据路由配置服务身份验证

】如何在ASP.NETCore2.0中根据路由配置服务身份验证【英文标题】:HowtoConfigureServicesAuthenticationbasedonroutesinASP.NETCore2.0【发布时间】:2018-03-0922:06:40【问题描述】:在ASP.NETCore1.x中,我可以在Configure中使用身份验证方法,但现在在ASP... 查看详情

如何在 ASP.NET Core 中强制执行小写路由?

】如何在ASP.NETCore中强制执行小写路由?【英文标题】:HowdoyouenforcelowercaseroutinginASP.NETCore?【发布时间】:2016-07-2109:40:38【问题描述】:在ASP.NET4中,这与应用程序的RegisterRoutes处理程序中的routes.LowercaseUrls=true;一样简单。我在ASP.... 查看详情

如何在 ASP.NET Core 中使用 SqlClient?

】如何在ASP.NETCore中使用SqlClient?【英文标题】:HowtouseSqlClientinASP.NETCore?【发布时间】:2016-02-1622:45:25【问题描述】:我正在尝试在ASP.netCore中使用SQLClient库,但似乎无法正常工作。我在网上找到了这篇文章,建议如何设置,但... 查看详情

如何获取 ASP.NET Core 中所有路由的列表?

】如何获取ASP.NETCore中所有路由的列表?【英文标题】:HowtogetalistofallroutesinASP.NETCore?【发布时间】:2015-04-1017:24:11【问题描述】:在ASP.NETCore中,有没有办法查看Startup中定义的所有路由的列表?我们使用IRouteBuilder的MapRoute扩展... 查看详情