如何在 Asp.Net Core 中管理用户敏感数据

译文连接: https://www.infoworld.com/art...

在应用程序开发时,你确定会有一些特别须要保护的数据,这些数据一般是很是机密的,敏感的,禁止和别人共享,这些信息包括:数据库链接串,你懂的,毕竟里面有 userid 和 password,还有 OAuth 验证用到的 accesskey,apikey 或者配置 azure,aws 等云服务的链接信息。html

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

在项目中添加 user secrets

能够很方便的将 user secrets 添加到你的项目中,你须要作的仅仅是。github

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

而后 Visual Studio 2019 会自动打开一个 secrets.json 文件。数据库

接下来在 secrets.json 中添加一些敏感数据。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 文件路径以下:windows

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

把项目编译一下,而后打开 project 的meta文件 .csproj,你会发现新增了一个 UserSecretsId 节点,代码以下:api

<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 和 敏感数据,在这一节中咱们一块儿看看怎么使用这个小工具。app

生成 user secrets

在 cmd 窗口输入以下命令:工具

dotnet user-secrets init

新增 user secrets 内容

要想看到当前全部的 secrets,输入如下命令。this

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
相关文章
相关标签/搜索