如何在 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
相關文章
相關標籤/搜索