iis 加密我的ASP.Net Core MVC Web应用程序中的appsettings.json部分

nom7f22z  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(138)

我在asp.net核心MVC Web应用程序中有以下appsettings.json

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\ProjectsV13;Database=LandingPage;Trusted_Connection=True;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "SMTP": {"
    "pass": "************"
  }
}

字符串
当我将应用程序发布到共享主机提供程序时,我将在appsettings.json的连接字符串中添加SQL Server用户名和密码。
所以我的问题是,我如何加密我的appsettings.json内托管在IIS内的远程共享主机提供商内的部分?我可以在Visual Studio项目中保留密码,但我想加密托管的appsettings.json?这可能吗?
谢谢

zc0qhyus

zc0qhyus1#

我如何加密我的appsettings.json中托管在IIS内部的远程共享托管提供程序中的部分?我可以将密码保存在Visual Studio项目中,但我想加密托管的appsettings.json?这可能吗?
首先,你需要以某种方式encrypt the password。这里你有很多选择。
官方推荐使用**Data Protection**如下:

string encrytedStr =  _protector.Protect("Unencrypted string");

字符串
然后,在您的项目中,您将在appsettings.json文件下找到一个appsettings.Development.json文件。
默认情况下,开发环境中使用的变量存储在appsettings.Development.json中,生产环境中使用的变量存储在appsettings. json文件中
因此,您可以将加密的内容放在appsettings.json文件中,并将未加密的密码放在appsettings.Development.json文件中。
并确保它们在json中的密钥相同,但值一个是加密的,另一个是未加密的。
然后,在调用密码的控制器中,注入DataProtectionIHostingEnvironmentIConfiguration三个服务,然后在获取值之前判断环境是生产还是开发环境,再决定是否解密该值。

using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration; 

namespace WebApplication_core_new.Controllers
{
    public class DefaultController : Controller
    {
        private readonly string _environmentName;
        private readonly IConfiguration _configuration;
        private readonly IDataProtector _protector;
        public DefaultController(IHostingEnvironment hostingEnvironment, IConfiguration configuration, IDataProtectionProvider provider)
        {
            _protector = provider.CreateProtector(GetType().FullName);
            _environmentName = hostingEnvironment.EnvironmentName;
            _configuration = configuration;
        }

        public IActionResult Index()
        {
            // here you can get the data in appsetting.json
            string data = _environmentName == "Development" ? _configuration["MySercet"] : _protector.Unprotect(_configuration["MySercet"]);
            return View();
        }
    }
}


在appsetting.json文件中:

{
  //... 
  "MySercet": "Encrypted string"
}


在appsetting.Development.json文件中:

{
      //... 
      "MySercet": "Unencrypted string"
 }

相关问题