譯文連接: https://www.infoworld.com/art...
在應用程序開發時,你確定會有一些特別須要保護的數據,這些數據一般是很是機密的,敏感的,禁止和別人共享,這些信息包括:數據庫鏈接串,你懂的,畢竟裏面有 userid 和 password,還有 OAuth 驗證用到的 accesskey,apikey 或者配置 azure,aws 等雲服務的鏈接信息。html
當項目和別人共享的時候,這些敏感信息天然也暴露給了別人,這一般是我不想看到的結果,那怎麼去預防呢? ASP.NET Core 中有一個叫作 User Secrets
特性,它容許將用戶敏感信息存儲在項目外的一個 json 文件中,那怎麼去管理這個 json 文件呢? 你能夠經過 命令行工具 Secrets Manager
去進行敏感信息的管理,這篇文章主要就是來聊一聊怎麼去管理這個 User Secrets
。git
能夠很方便的將 user secrets 添加到你的項目中,你須要作的僅僅是。github
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
是 .NET Core 中的一個命令行管理工具,主要用來管理 Configuration 和 敏感數據,在這一節中咱們一塊兒看看怎麼使用這個小工具。app
在 cmd 窗口輸入以下命令:工具
dotnet user-secrets init
要想看到當前全部的 secrets,輸入如下命令。this
dotnet user-secrets list
下圖展現了我以前建立的一些 key。
接下來用 set 命令設置一條敏感數據。
dotnet user-secrets set "AuthorApiKey" "xyz1@3"
爲了可以實現用代碼去訪問,能夠用 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 }
要想刪除這個 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
。
更多高質量乾貨:參見個人 GitHub: dotnetfly