日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core 优雅的在开发环境保存机密(User Secrets)

發(fā)布時間:2023/12/4 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core 优雅的在开发环境保存机密(User Secrets) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

在應(yīng)用程序開發(fā)的過程中,有的時候需要在代碼中保存一些機(jī)密的信息,比如加密密鑰,字符串,或者是用戶名密碼等。通常的做法是保存到一個配置文件中,在以前我們會把他保存到web.config中,但是在ASP.NET Core中,這一方式或許發(fā)生了改變,或者說你有更多多元化的方法, 以及更加優(yōu)雅的的配置來設(shè)置或者保存這些機(jī)密資料。

起初我以為這個UserSecrets它并沒有什么用,因?yàn)槲矣行枰渲玫牡胤轿抑苯优渲玫絘ppsetting.json文件中就可以了,直到一次開發(fā)過程中,我才感受到了它真正的用途。

目錄

  • 用戶機(jī)密介紹

  • 如何添加用戶機(jī)密

  • 在應(yīng)用程序中使用用戶機(jī)密

  • 總結(jié)

用戶機(jī)密介紹

有以下場景大家可以想一下在以前的代碼中我們是怎么樣處理的:

  • 需要保存一些和第三方網(wǎng)站對接的密鑰,比如和 微信,微博站點(diǎn)使用的 appkey

  • 給每個開發(fā)人員配置不用的用戶名密碼來訪問一些資源

  • 開發(fā)人員在開發(fā)過程中使用各自本機(jī)的數(shù)據(jù)庫,如何配置數(shù)據(jù)庫地址、賬號和密碼

假設(shè)說最后一項(xiàng),每個開發(fā)要使用自己本機(jī)的數(shù)據(jù)庫,你可能會說讓每個人修改自己的web.config,在提交代碼的時候不提交就行了。那么如果在web.config添加其他配置項(xiàng)的時候,顯然不提交web.config文件不合理的。

現(xiàn)在,ASP.NET Core 提供了一種很優(yōu)雅簡潔的方式 User Secrets 用來幫助我們解決這個事情。

在新建一個 ASP.NET Core Web 應(yīng)用程序的時候,會在 Startup.cs 文件中看到這樣一段代碼:

public Startup(IHostingEnvironment env) {..... ? ?if (env.IsDevelopment()){builder.AddUserSecrets();}builder.AddEnvironmentVariables(); }

在 project.json 文件中,會看到 User Secrets 相關(guān)的一些配置

{"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這行代碼,他是在開發(fā)環(huán)境才運(yùn)行的。

userSecretsId是用來標(biāo)識項(xiàng)目的User Secrets唯一性的,如果有兩個項(xiàng)目需要使用不同的Secrets ,這就需要有不同的userSecretsId。

Microsoft.Extensions.SecretManager.Tools 主要是用來設(shè)置或者查看secrets的值。

如何添加用戶機(jī)密

可以在命令行中使用命令來添加:

  • 切換命令行窗口到程序的運(yùn)行目錄, 輸入 dotnet user-secrets -h ,來查看可以使用的命令

  • 使用 dotnet user-secrets list 列出所有的用戶機(jī)密

  • 使用 dotnet user-secrets set WeChatAppKey "X3423FEED2435DD"設(shè)置一個用戶機(jī)密,其中 WebChatAppKey 為鍵,后面的是值。

  • 然后使用dotnet user-secrets list來查看設(shè)置的鍵值對。

  • 然后我又設(shè)置了一個數(shù)據(jù)庫的連接字符串進(jìn)去。

以上是使用命令行的方式來設(shè)置用戶機(jī)密,也可以使用 Visual Studio 2015代替命令行來做這項(xiàng)工作。

Visual Studio中,在Web項(xiàng)目上右鍵,可以看到一個 管理用戶機(jī)密 的菜單:

點(diǎn)擊打開時候,會出現(xiàn)一個secrets.json的文件,里面就是剛剛在命令行設(shè)置的鍵值對:

有些同學(xué)可能會問既然是存儲到secrets.json,那么這個文件是在哪里呢?

secrets.json的存儲位置?

在非Windows系統(tǒng)中,它的存儲位置在

~/.microsoft/usersecrets/<userSecretsId>/secrets.json

在Windows系統(tǒng)中,它的位置在

C:\Users\用戶名\AppData\Roaming\Microsoft\UserSecrets\aspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e

可以看到,存儲的上層文件夾就是project.json文件中的 userSecretsId 設(shè)定的值。

在應(yīng)用程序中使用用戶機(jī)密

要在應(yīng)用程序中訪問配置的用戶機(jī)密,你需要保證project.json文件中存在依賴項(xiàng):
Microsoft.Extensions.Configuration.UserSecrets 并且builder.AddUserSecrets()。

然后在Startup.cs文件中通過 Configuration 對象訪問

public IConfigurationRoot Configuration { get; }

public void ConfigureServices(IServiceCollection services){ ?
? ? ?var wechatKey = Configuration["WeChatAppKey"] }

你可以使用DI來將用戶機(jī)密映射到一個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文件中相同節(jié)點(diǎn)(沖突)的配置項(xiàng),那么就會被secrets.json中的設(shè)置項(xiàng)給覆蓋掉,因?yàn)?builder.AddUserSecrets()晚于 AddJsonFile("appsettings.json")注冊, 那么我們可以利用這個特性來在每個開發(fā)人員的機(jī)器上重新設(shè)置數(shù)據(jù)庫連接字符串了。

總結(jié)

以上,或許可以感受到微軟在 ASP.NET Core 中對于開發(fā)人員還是非常貼心的,很多小細(xì)節(jié)都考慮到了,因此在我們構(gòu)建應(yīng)用程序的過程中,可以多使用這些小功能(特性)來讓我們的代碼更加的優(yōu)雅~


原文地址:http://www.cnblogs.com/savorboard/p/dotnetcore-user-secrets.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

贊賞

總結(jié)

以上是生活随笔為你收集整理的ASP.NET Core 优雅的在开发环境保存机密(User Secrets)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。