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

dotNET全栈开发

共 3013字,需浏览 7分钟

 ·

2020-12-12 22:25

译文链接:https://www.infoworld.com/article/3576292/how-to-work-with-user-secrets-in-asp-net-core.html

在应用程序开发时,你肯定会有一些特别需要保护的数据,这些数据通常是非常机密的,敏感的,禁止和别人共享,这些信息包括:数据库连接串,你懂的,毕竟里面有 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 节点,代码如下:


"Microsoft.NET.Sdk.Web">
  
    netcoreapp3.1
    e4f51d14-ddc1-48f4-bb34-84c114e3d6d0
  



使用 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 _logger;
        public HomeController(ILogger logger)
        {
            _logger = logger;
        }
        //Action methods go here - this is done for brevity
    }

因为需要用 Configuration Api 去访问,这里我准备用依赖注入的方式来实现 configuration 的注入,代码如下:


    public class HomeController : Controller
    {
        private readonly ILogger _logger;
        private readonly IConfiguration _config;
        public HomeController(ILogger 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 settings 和  Azure key vault

回复 【小程序】获取15套小程序源码【学习+实战+赚钱
回复 【关闭】学关闭微信朋友圈广告
回复 【实战】获取20套实战源码
回复 【福利】获取最新微信支付有奖励
回复 【被删】学查看你哪个好友删除了你巧
回复 【访客】学微信查看朋友圈访客记录
回复 【python】学微获取全套0基础Python知识手册

【附申请地址】阿里云网盘,内测资格,开放申请了!非会员下载 10MB/s!有图有真相!


卧槽:第一次见这么牛x的网站?


浏览 15
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报