這篇文章主要為大家詳細介紹了ASP.NET Core如何優雅的在開發環境保存機密User Secrets,具有一定的參考價值,感興趣的小伙伴們可以參考一下
#前言
在應用程式開發的過程中,有的時候需要在程式碼中保存一些機密的信息,例如加密金鑰,字串,或是用戶名密碼等。通常的做法是保存到一個設定檔中,在以前我們會把他儲存到web.config中,但是在ASP.NET Core中,這方式或許發生了改變,或者說你有更多多元化的方法, 以及更加優雅的配置來設置或保存這些機密資料。
起初我以為這個UserSecrets它並沒有什麼用,因為我有需要配置的地方我直接配置到appsetting.json文件中就可以了,直到一次開發過程中,我才感受到了它真正的用途。
目錄
使用者機密介紹
如何新增使用者機密
#在應用程式中使用用戶機密
總結
用戶機密介紹
有以下場景大家可以想一下在以前的程式碼中我們是怎麼樣處理的:
#需要保存一些和第三方網站對接的金鑰,例如和微信,微博網站使用的appkey
給每個開發人員配置不用的使用者名稱密碼來存取一些資源
開發人員在開發過程中使用各自本機的資料庫,如何設定資料庫位址、帳號和密碼
#假設說最後一項,每個開發要使用自己本機的資料庫,你可能會說讓每個人修改自己的web.config,在提交程式碼的時候不提交就行了。那如果在web.config加入其他組態項目的時候,顯然不提交web.config檔不合理的。
現在,ASP.NET Core 提供了一種很優雅簡潔的方式 User Secrets 用來幫助我們解決這個事情。
在新建一個ASP.NET Core Web 應用程式的時候,會在Startup.cs 檔案中看到這樣一段程式碼:
public Startup(IHostingEnvironment env) { ..... if (env.IsDevelopment()) { builder.AddUserSecrets(); } builder.AddEnvironmentVariables(); }
在project .json 檔案中,會看到與User Secrets 相關的一些設定
{ "userSecretsId": "aspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e" ... "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0", "Microsoft.Extensions.SecretManager.Tools": “1.0.0-preview2-final” }
可以看到builder.AddUserSecrets這行程式碼,他是在開發環境才執行的。
userSecretsId是用來識別專案的User Secrets唯一性的,如果有兩個專案需要使用不同的Secrets ,這就需要有不同的userSecretsId。
Microsoft.Extensions.SecretManager.Tools 主要是用來設定或查看secrets的值。
如何新增使用者機密
可以在命令列中使用命令來新增:
image
切換命令列視窗到程式的運行目錄, 輸入 dotnet user-secrets -h ,來查看可以使用的命令
使用 dotnet user-secrets list 列出所有的使用者機密
使用dotnet user-secrets set WeChatAppKey "X3423FEED2435DD"設定一個使用者機密,其中WebChatAppKey 為鍵,後面的是值。
然後使用dotnet user-secrets list來查看設定的鍵值對。
然後我又設定了一個資料庫的連接字串進去。
以上是使用命令列的方式來設定使用者機密,也可以使用 Visual Studio 2015取代命令列來做這項工作。
Visual Studio中,在Web專案上右鍵,可以看到一個管理使用者機密 的選單:
image
點擊打開時候,會出現一個secrets.json的文件,裡面就是剛剛在命令列設定的鍵值對:
image
有些同學可能會問既然是存儲到secrets.json,那麼這個檔案在哪裡呢?
secrets.json的儲存位置?
在非Windows系統中,它的儲存位置在
~/.microsoft/usersecrets/<userSecretsId>/secrets.json
在Windows系統中,它的位置在
C:\Users\用户名\AppData\Roaming\Microsoft\UserSecrets\aspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e
可以看到,儲存的上層資料夾就是project.json檔案中的userSecretsId 設定的值。
在應用程式中使用使用者機密
要在應用程式中存取設定的使用者機密,你需要保證project.json檔案中存在相依性:
Microsoft.Extensions.Configuration.UserSecrets 且builder.AddUserSecrets()。
然后在Startup.cs文件中通过 Configuration 对象访问
public IConfigurationRoot Configuration { get; } public void ConfigureServices(IServiceCollection services) { var wechatKey = Configuration["WeChatAppKey"] }
你可以使用DI来将用户机密映射到一个C#类文件,像这样
secrets.json
{ "SecretsKeys": { WeCharAppKey:"xxejfwert3045", WeboAppKey:"35402345lkefgjlkdfg", ..... } }
SecretsKeysConfig.cs
public class SecretsKeysConfig { public string WeCharAppKey { get; set;} public string WeboAppKey { get; set;} // ...... }
Startup.cs
public void ConfigureServices(IServiceCollection services) { services.Configure<SecretsKeysConfig>(Configuration.GetSection("SecretsKeys")); // 其他代码 }
HomeController.cs
public class HomeController : Controller { public SecretsKeysConfig AppConfigs { get; } public HomeController(IOptions<SecretsKeysConfig> appkeys) { AppConfigs = appkeys.Value; } }
注意:如果你的appsetting.json文件中有和secrets.json文件中相同节点(冲突)的配置项,那么就会被secrets.json中的设置项给覆盖掉,因为 builder.AddUserSecrets()晚于 AddJsonFile("appsettings.json")注册, 那么我们可以利用这个特性来在每个开发人员的机器上重新设置数据库连接字符串了。
总结
以上,或许可以感受到微软在 ASP.NET Core 中对于开发人员还是非常贴心的,很多小细节都考虑到了,因此在我们构建应用程序的过程中,可以多使用这些小功能(特性)来让我们的代码更加的优雅~
【相关推荐】
4. 如何在ASP.NET Core中使用Cookie中间件的详细介绍
5. .Net Core中如何使用ref和Span
以上是分享ASP.NET Core在開發環境中保存機密(User Secrets)的實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C#.NET的優勢包括:1)語言特性,如異步編程簡化了開發;2)性能與可靠性,通過JIT編譯和垃圾回收機制提升效率;3)跨平台支持,.NETCore擴展了應用場景;4)實際應用廣泛,從Web到桌面和遊戲開發都有出色表現。

C#並不總是與.NET捆綁在一起。 1)C#可以在Mono運行時環境中運行,適用於Linux和macOS。 2)在Unity遊戲引擎中,C#用於腳本編寫,不依賴.NET框架。 3)C#還可用於嵌入式系統開發,如.NETMicroFramework。

C#在.NET生態系統中扮演核心角色,是開發者的首選語言。 1)C#提供高效、易用的編程方式,結合C、C 和Java的優點。 2)通過.NET運行時(CLR)執行,確保跨平台高效運行。 3)C#支持從基本到高級的用法,如LINQ和異步編程。 4)優化和最佳實踐包括使用StringBuilder和異步編程,提高性能和可維護性。

C#是微軟在2000年發布的編程語言,旨在結合C 的強大功能和Java的簡潔性。 1.C#是一種類型安全、面向對象的編程語言,支持封裝、繼承和多態。 2.C#的編譯過程將代碼轉化為中間語言(IL),然後在.NET運行時環境(CLR)中即時編譯成機器碼執行。 3.C#的基本用法包括變量聲明、控制流和函數定義,而高級用法涵蓋異步編程、LINQ和委託等。 4.常見錯誤包括類型不匹配和空引用異常,可通過調試器、異常處理和日誌記錄來調試。 5.性能優化建議包括使用LINQ、異步編程和提高代碼可讀性。

C#是一種編程語言,而.NET是一個軟件框架。 1.C#由微軟開發,適用於多平台開發。 2..NET提供類庫和運行時環境,支持多語言。兩者協同工作,構建現代應用。

C#.NET是一個強大的開發平台,結合了C#語言和.NET框架的優勢。 1)它廣泛應用於企業應用、Web開發、遊戲開發和移動應用開發。 2)C#代碼編譯成中間語言後由.NET運行時環境執行,支持垃圾回收、類型安全和LINQ查詢。 3)使用示例包括基本控制台輸出和高級LINQ查詢。 4)常見錯誤如空引用和類型轉換錯誤可以通過調試器和日誌記錄解決。 5)性能優化建議包括異步編程和優化LINQ查詢。 6)儘管面臨競爭,C#.NET通過不斷創新保持其重要地位。

C#.NET的未來趨勢主要集中在雲計算、微服務、AI和機器學習集成以及跨平台開發三個方面。 1)雲計算和微服務:C#.NET通過Azure平台優化雲環境表現,支持構建高效微服務架構。 2)AI和機器學習集成:借助ML.NET庫,C#開發者可在應用中嵌入機器學習模型,推動智能化應用發展。 3)跨平台開發:通過.NETCore和.NET5 ,C#應用可在Windows、Linux和macOS上運行,擴展部署範圍。

C#.NET開發的最新動態和最佳實踐包括:1.異步編程提高應用響應性,使用async和await關鍵字簡化非阻塞代碼;2.LINQ提供強大查詢功能,通過延遲執行和表達式樹高效操作數據;3.性能優化建議包括使用異步編程、優化LINQ查詢、合理管理內存、提升代碼可讀性和維護性、以及編寫單元測試。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。