搜尋
首頁後端開發C#.Net教程ASP.NET中Core優雅的在開發環境保存機密(User Secrets)的詳解

這篇文章主要為大家詳細介紹了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//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 中对于开发人员还是非常贴心的,很多小细节都考虑到了,因此在我们构建应用程序的过程中,可以多使用这些小功能(特性)来让我们的代码更加的优雅~

以上是ASP.NET中Core優雅的在開發環境保存機密(User Secrets)的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C#和.NET運行時:它們如何一起工作C#和.NET運行時:它們如何一起工作Apr 19, 2025 am 12:04 AM

C#和.NET運行時緊密合作,賦予開發者高效、強大且跨平台的開發能力。 1)C#是一種類型安全且面向對象的編程語言,旨在與.NET框架無縫集成。 2).NET運行時管理C#代碼的執行,提供垃圾回收、類型安全等服務,確保高效和跨平台運行。

C#.NET開發:入門的初學者指南C#.NET開發:入門的初學者指南Apr 18, 2025 am 12:17 AM

要開始C#.NET開發,你需要:1.了解C#的基礎知識和.NET框架的核心概念;2.掌握變量、數據類型、控制結構、函數和類的基本概念;3.學習C#的高級特性,如LINQ和異步編程;4.熟悉常見錯誤的調試技巧和性能優化方法。通過這些步驟,你可以逐步深入C#.NET的世界,並編寫高效的應用程序。

c#和.net:了解兩者之間的關係c#和.net:了解兩者之間的關係Apr 17, 2025 am 12:07 AM

C#和.NET的關係是密不可分的,但它們不是一回事。 C#是一門編程語言,而.NET是一個開發平台。 C#用於編寫代碼,編譯成.NET的中間語言(IL),由.NET運行時(CLR)執行。

c#.net的持續相關性:查看當前用法c#.net的持續相關性:查看當前用法Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因為它提供了強大的工具和庫,支持多種應用開發。 1)C#結合.NET框架,使開發高效便捷。 2)C#的類型安全和垃圾回收機制增強了其優勢。 3).NET提供跨平台運行環境和豐富的API,提升了開發靈活性。

從網絡到桌面:C#.NET的多功能性從網絡到桌面:C#.NET的多功能性Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#.NET與未來:適應新技術C#.NET與未來:適應新技術Apr 14, 2025 am 12:06 AM

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

c#.net適合您嗎?評估其適用性c#.net適合您嗎?評估其適用性Apr 13, 2025 am 12:03 AM

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

.NET中的C#代碼:探索編程過程.NET中的C#代碼:探索編程過程Apr 12, 2025 am 12:02 AM

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具