如何在 Asp.Net Core 中 管理敏感数据
譯文鏈接:https://www.infoworld.com/article/3576292/how-to-work-with-user-secrets-in-asp-net-core.html
在應(yīng)用程序開發(fā)時(shí),你肯定會(huì)有一些特別需要保護(hù)的數(shù)據(jù),這些數(shù)據(jù)通常是非常機(jī)密的,敏感的,禁止和別人共享,這些信息包括:數(shù)據(jù)庫連接串,你懂的,畢竟里面有 userid 和 password,還有 OAuth 驗(yàn)證用到的 accesskey,apikey 或者配置 azure,aws 等云服務(wù)的連接信息。
當(dāng)項(xiàng)目和別人共享的時(shí)候,這些敏感信息自然也暴露給了別人,這通常是我不想看到的結(jié)果,那怎么去預(yù)防呢?ASP.NET Core 中有一個(gè)叫做 User Secrets 特性,它允許將用戶敏感信息存儲(chǔ)在項(xiàng)目外的一個(gè) json 文件中,那怎么去管理這個(gè) json 文件呢?你可以通過 命令行工具 Secrets Manager 去進(jìn)行敏感信息的管理,這篇文章主要就是來聊一聊怎么去管理這個(gè) User Secrets。
在項(xiàng)目中添加 user secrets
可以很方便的將 user secrets 添加到你的項(xiàng)目中,你需要做的僅僅是。
在解決方案管理器上選擇 project
右鍵點(diǎn)擊選擇 Manage User Secrets。
然后 Visual Studio 2019 會(huì)自動(dòng)打開一個(gè) 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!"}} }對(duì)了, 默認(rèn)的 secret.json 文件路徑如下:
C:\Users\38034\AppData\Roaming\Microsoft\UserSecrets\b87644d3-6898-47e4-8580-b3de15f22b96把項(xiàng)目編譯一下,然后打開 project 的meta文件 .csproj,你會(huì)發(fā)現(xiàn)新增了一個(gè) UserSecretsId 節(jié)點(diǎn),代碼如下:
<Project?Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>netcoreapp3.1</TargetFramework><UserSecretsId>e4f51d14-ddc1-48f4-bb34-84c114e3d6d0</UserSecretsId></PropertyGroup> </Project>使用 Secret Manager tool 管理工具
這個(gè) Secret Manager tool 是 .NET Core 中的一個(gè)命令行管理工具,主要用來管理 Configuration 和 敏感數(shù)據(jù),在這一節(jié)中我們一起看看怎么使用這個(gè)小工具。
生成 user secrets
在 cmd 窗口輸入如下命令:
dotnet?user-secrets?init新增 user secrets 內(nèi)容
要想看到當(dāng)前所有的 secrets,輸入以下命令。
dotnet?user-secrets?list下圖展示了我之前創(chuàng)建的一些 key。
接下來用 set 命令設(shè)置一條敏感數(shù)據(jù)。
dotnet?user-secrets?set?"AuthorApiKey"?"xyz1@3"訪問 secret
為了能夠?qū)崿F(xiàn)用代碼去訪問,可以用 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}因?yàn)樾枰?Configuration Api 去訪問,這里我準(zhǔn)備用依賴注入的方式來實(shí)現(xiàn) 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
要想刪除這個(gè) key,可以使用下面的命令。
dotnet?user-secrets?remove?"AuthorApiKey"如果你想移除所有的key,可以使用下面的命令。
dotnet?user-secrets?clear如果你想移除某一個(gè)層級(jí)中的子層key,可以使用 : 運(yùn)算符,代碼如下:
dotnet?user-secrets?remove?"AppSettings:GlobalSettings"ASP.NET Core 重定義了對(duì) Configuration 中的數(shù)據(jù)配置,管理和保護(hù),而且還有這個(gè)非常 ????????的 ?User Secrets,可以很好的替代以前用環(huán)境變量的方式,而且可以確保源碼中不再有任何敏感數(shù)據(jù),畢竟 User Secrets 是存儲(chǔ)在項(xiàng)目之外的一個(gè)文件夾下,這個(gè)路徑之前也給大家看到了,是 windows 的一個(gè) 用戶文件夾。
不過這里有一個(gè)缺點(diǎn),存儲(chǔ)在 User Secrets 中的數(shù)據(jù)是以明文形式存在的,不用怕,后面的文章我會(huì)討論一些其他的方法來保護(hù)用戶敏感數(shù)據(jù),比如說:Azure application settings 和 ?Azure key vault。
總結(jié)
以上是生活随笔為你收集整理的如何在 Asp.Net Core 中 管理敏感数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我是如何把 Java 项目移植到 .NE
- 下一篇: C#开源项目:SiMay远程控制管理系统