如何在 Asp.Net Core 中 管理敏感数据
譯文鏈接:https://www.infoworld.com/article/3576292/how-to-work-with-user-secrets-in-asp-net-core.html
在應用程序開發(fā)時,你肯定會有一些特別需要保護的數據,這些數據通常是非常機密的,敏感的,禁止和別人共享,這些信息包括:數據庫連接串,你懂的,畢竟里面有 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,你會發(fā)現新增了一個 UserSecretsId 節(jié)點,代碼如下:
<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 和 敏感數據,在這一節(jié)中我們一起看看怎么使用這個小工具。
生成 user secrets
在 cmd 窗口輸入如下命令:
dotnet?user-secrets?init新增 user secrets 內容
要想看到當前所有的 secrets,輸入以下命令。
dotnet?user-secrets?list下圖展示了我之前創(chuàng)建的一些 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,可以很好的替代以前用環(huán)境變量的方式,而且可以確保源碼中不再有任何敏感數據,畢竟 User Secrets 是存儲在項目之外的一個文件夾下,這個路徑之前也給大家看到了,是 windows 的一個 用戶文件夾。
不過這里有一個缺點,存儲在 User Secrets 中的數據是以明文形式存在的,不用怕,后面的文章我會討論一些其他的方法來保護用戶敏感數據,比如說:Azure application settings 和 ?Azure key vault。
總結
以上是生活随笔為你收集整理的如何在 Asp.Net Core 中 管理敏感数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我是如何把 Java 项目移植到 .NE
- 下一篇: C#开源项目:SiMay远程控制管理系统