关于c#:如何在-AspNet-Core-中管理用户敏感数据

44次阅读

共计 2464 个字符,预计需要花费 7 分钟才能阅读完成。

译文链接:https://www.infoworld.com/art…

在利用程序开发时,你必定会有一些特地须要爱护的数据,这些数据通常是十分秘密的,敏感的,禁止和他人共享,这些信息包含:数据库连贯串,你懂的,毕竟外面有 userid 和 password,还有 OAuth 验证用到的 accesskey,apikey 或者配置 azure,aws 等云服务的连贯信息。

当我的项目和他人共享的时候,这些敏感信息天然也裸露给了他人,这通常是我不想看到的后果,那怎么去预防呢?ASP.NET Core 中有一个叫做 User Secrets 个性,它容许将用户敏感信息存储在我的项目外的一个 json 文件中,那怎么去治理这个 json 文件呢?你能够通过 命令行工具 Secrets Manager 去进行敏感信息的治理,这篇文章次要就是来聊一聊怎么去治理这个 User Secrets

在我的项目中增加 user secrets

能够很不便的将 user secrets 增加到你的我的项目中,你须要做的仅仅是。

  • 在解决方案管理器上抉择 project
  • 右键点击抉择 Manage User Secrets

而后 Visual Studio 2019 会主动关上一个 secrets.json 文件。

接下来在 secrets.json 中增加一些敏感数据。


{
  "ConnectionString": "This is a test connection string",
  "APIKey": "This is s secret key",
  "AppSettings": {
    "GlobalSettings": {"GlobalAccessKey": "This is a global access key!"}
  }
}

对了,默认的 secret.json 文件门路如下:


C:\Users\38034\AppData\Roaming\Microsoft\UserSecrets\b87644d3-6898-47e4-8580-b3de15f22b96

把我的项目编译一下,而后关上 project 的 meta 文件 .csproj,你会发现新增了一个 UserSecretsId 节点,代码如下:


<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UserSecretsId>e4f51d14-ddc1-48f4-bb34-84c114e3d6d0</UserSecretsId>
  </PropertyGroup>
</Project>

应用 Secret Manager tool 管理工具

这个 Secret Manager tool 是 .NET Core 中的一个命令行管理工具,次要用来治理 Configuration 和 敏感数据,在这一节中咱们一起看看怎么应用这个小工具。

生成 user secrets

在 cmd 窗口输出如下命令:


dotnet user-secrets init

新增 user secrets 内容

要想看到以后所有的 secrets,输出以下命令。


dotnet user-secrets list

下图展现了我之前创立的一些 key。

接下来用 set 命令设置一条敏感数据。


dotnet user-secrets set "AuthorApiKey" "xyz1@3"

拜访 secret

为了可能实现用代码去拜访,能够用 ASP.NET Core 里的 Configuration Api,HomeController 的代码如下:


    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        public HomeController(ILogger<HomeController> logger)
        {_logger = logger;}
        //Action methods go here - this is done for brevity
    }

因为须要用 Configuration Api 去拜访,这里我筹备用依赖注入的形式来实现 configuration 的注入,代码如下:


    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private readonly IConfiguration _config;
        public HomeController(ILogger<HomeController> logger,
                              IConfiguration config)
        {
            _logger = logger;
            _config = config;
        }
        //Action methods go here - this is done for brevity
    }

删除 secret

要想删除这个 key,能够应用上面的命令。


dotnet user-secrets remove "AuthorApiKey"

如果你想移除所有的 key,能够应用上面的命令。


dotnet user-secrets clear

如果你想移除某一个层级中的子层 key,能够应用 : 运算符,代码如下:


dotnet user-secrets remove "AppSettings:GlobalSettings"

ASP.NET Core 重定义了对 Configuration 中的数据配置,治理和爱护,而且还有这个十分 ???????? 的 User Secrets,能够很好的代替以前用环境变量的形式,而且能够确保源码中不再有任何敏感数据,毕竟 User Secrets 是存储在我的项目之外的一个文件夹下,这个门路之前也给大家看到了,是 windows 的一个 用户文件夹。

不过这里有一个毛病,存储在 User Secrets 中的数据是以明文模式存在的,不必怕,前面的文章我会探讨一些其余的办法来爱护用户敏感数据,比如说: Azure application settingsAzure key vault

更多高质量干货:参见我的 GitHub: dotnetfly

正文完
 0