如何在 Asp.Net Core 中 管理敏感數(shù)據(jù)
譯文鏈接:https://www.infoworld.com/article/3576292/how-to-work-with-user-secrets-in-asp-net-core.html
在應用程序開發(fā)時,你肯定會有一些特別需要保護的數(shù)據(jù),這些數(shù)據(jù)通常是非常機密的,敏感的,禁止和別人共享,這些信息包括:數(shù)據(jù)庫連接串,你懂的,畢竟里面有 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 中添加一些敏感數(shù)據(jù)。
{
??"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,你會發(fā)現(xiàn)新增了一個 UserSecretsId 節(jié)點,代碼如下:
"Microsoft.NET.Sdk.Web">
??
????netcoreapp3.1
????e4f51d14-ddc1-48f4-bb34-84c114e3d6d0
??
使用 Secret Manager tool 管理工具
這個 Secret Manager tool 是 .NET Core 中的一個命令行管理工具,主要用來管理 Configuration 和 敏感數(shù)據(jù),在這一節(jié)中我們一起看看怎么使用這個小工具。
生成 user secrets
在 cmd 窗口輸入如下命令:
dotnet?user-secrets?init
新增 user secrets 內容
要想看到當前所有的 secrets,輸入以下命令。
dotnet?user-secrets?list
下圖展示了我之前創(chuàng)建的一些 key。

接下來用 set 命令設置一條敏感數(shù)據(jù)。
dotnet?user-secrets?set?"AuthorApiKey"?"xyz1@3"
訪問 secret
為了能夠實現(xiàn)用代碼去訪問,可以用 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 去訪問,這里我準備用依賴注入的方式來實現(xiàn) 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 中的數(shù)據(jù)配置,管理和保護,而且還有這個非常 ??的 ?User Secrets,可以很好的替代以前用環(huán)境變量的方式,而且可以確保源碼中不再有任何敏感數(shù)據(jù),畢竟 User Secrets 是存儲在項目之外的一個文件夾下,這個路徑之前也給大家看到了,是 windows 的一個 用戶文件夾。
不過這里有一個缺點,存儲在 User Secrets 中的數(shù)據(jù)是以明文形式存在的,不用怕,后面的文章我會討論一些其他的方法來保護用戶敏感數(shù)據(jù),比如說:Azure application settings 和 ?Azure key vault。


【附申請地址】阿里云網(wǎng)盤,內測資格,開放申請了!非會員下載 10MB/s!有圖有真相!

臥槽:第一次見這么牛x的網(wǎng)站?
