這篇文章將為大家詳細(xì)講解有關(guān)ASP.NET Core怎么在開發(fā)環(huán)境保存機(jī)密User Secrets,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
10年積累的成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有吳川免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。前言
在應(yīng)用程序開發(fā)的過程中,有的時(shí)候需要在代碼中保存一些機(jī)密的信息,比如加密密鑰,字符串,或者是用戶名密碼等。通常的做法是保存到一個(gè)配置文件中,在以前我們會(huì)把他保存到web.config中,但是在ASP.NET Core中,這一方式或許發(fā)生了改變,或者說你有更多多元化的方法, 以及更加優(yōu)雅的的配置來設(shè)置或者保存這些機(jī)密資料。
起初我以為這個(gè)UserSecrets它并沒有什么用,因?yàn)槲矣行枰渲玫牡胤轿抑苯优渲玫絘ppsetting.json文件中就可以了,直到一次開發(fā)過程中,我才感受到了它真正的用途。
目錄
用戶機(jī)密介紹
如何添加用戶機(jī)密
在應(yīng)用程序中使用用戶機(jī)密
總結(jié)
用戶機(jī)密介紹
有以下場(chǎng)景大家可以想一下在以前的代碼中我們是怎么樣處理的:
需要保存一些和第三方網(wǎng)站對(duì)接的密鑰,比如和 微信,微博站點(diǎn)使用的 appkey
給每個(gè)開發(fā)人員配置不用的用戶名密碼來訪問一些資源
開發(fā)人員在開發(fā)過程中使用各自本機(jī)的數(shù)據(jù)庫,如何配置數(shù)據(jù)庫地址、賬號(hào)和密碼
假設(shè)說最后一項(xiàng),每個(gè)開發(fā)要使用自己本機(jī)的數(shù)據(jù)庫,你可能會(huì)說讓每個(gè)人修改自己的web.config,在提交代碼的時(shí)候不提交就行了。那么如果在web.config添加其他配置項(xiàng)的時(shí)候,顯然不提交web.config文件不合理的。
現(xiàn)在,ASP.NET Core 提供了一種很優(yōu)雅簡(jiǎn)潔的方式 User Secrets 用來幫助我們解決這個(gè)事情。
在新建一個(gè) ASP.NET Core Web 應(yīng)用程序的時(shí)候,會(huì)在 Startup.cs 文件中看到這樣一段代碼:
public Startup(IHostingEnvironment env) { ..... if (env.IsDevelopment()) { builder.AddUserSecrets(); } builder.AddEnvironmentVariables(); }
在 project.json 文件中,會(huì)看到 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)識(shí)項(xiàng)目的User Secrets唯一性的,如果有兩個(gè)項(xiàng)目需要使用不同的Secrets ,這就需要有不同的userSecretsId。
Microsoft.Extensions.SecretManager.Tools 主要是用來設(shè)置或者查看secrets的值。
如何添加用戶機(jī)密
可以在命令行中使用命令來添加:
image
切換命令行窗口到程序的運(yùn)行目錄, 輸入 dotnet user-secrets -h ,來查看可以使用的命令
使用 dotnet user-secrets list 列出所有的用戶機(jī)密
使用 dotnet user-secrets set WeChatAppKey "X3423FEED2435DD"設(shè)置一個(gè)用戶機(jī)密,其中 WebChatAppKey 為鍵,后面的是值。
然后使用dotnet user-secrets list來查看設(shè)置的鍵值對(duì)。
然后我又設(shè)置了一個(gè)數(shù)據(jù)庫的連接字符串進(jìn)去。
以上是使用命令行的方式來設(shè)置用戶機(jī)密,也可以使用 Visual Studio 2015代替命令行來做這項(xiàng)工作。
Visual Studio中,在Web項(xiàng)目上右鍵,可以看到一個(gè) 管理用戶機(jī)密 的菜單:
image
點(diǎn)擊打開時(shí)候,會(huì)出現(xiàn)一個(gè)secrets.json的文件,里面就是剛剛在命令行設(shè)置的鍵值對(duì):
image
有些同學(xué)可能會(huì)問既然是存儲(chǔ)到secrets.json,那么這個(gè)文件是在哪里呢?
secrets.json的存儲(chǔ)位置?
在非Windows系統(tǒng)中,它的存儲(chǔ)位置在
~/.microsoft/usersecrets/
在Windows系統(tǒng)中,它的位置在
C:\Users\用戶名\AppData\Roaming\Microsoft\UserSecrets\aspnet-WebAppCore-e278c40f-15bd-4c19-9662-541514f02f3e
可以看到,存儲(chǔ)的上層文件夾就是project.json文件中的 userSecretsId 設(shè)定的值。
在應(yīng)用程序中使用用戶機(jī)密
要在應(yīng)用程序中訪問配置的用戶機(jī)密,你需要保證project.json文件中存在依賴項(xiàng):
Microsoft.Extensions.Configuration.UserSecrets 并且builder.AddUserSecrets()。
然后在Startup.cs文件中通過 Configuration 對(duì)象訪問
public IConfigurationRoot Configuration { get; } public void ConfigureServices(IServiceCollection services) { var wechatKey = Configuration["WeChatAppKey"] }
你可以使用DI來將用戶機(jī)密映射到一個(gè)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(Configuration.GetSection("SecretsKeys")); // 其他代碼 }
HomeController.cs
public class HomeController : Controller { public SecretsKeysConfig AppConfigs { get; } public HomeController(IOptionsappkeys) { AppConfigs = appkeys.Value; } }
注意:如果你的appsetting.json文件中有和secrets.json文件中相同節(jié)點(diǎn)(沖突)的配置項(xiàng),那么就會(huì)被secrets.json中的設(shè)置項(xiàng)給覆蓋掉,因?yàn)?builder.AddUserSecrets()晚于 AddJsonFile("appsettings.json")注冊(cè), 那么我們可以利用這個(gè)特性來在每個(gè)開發(fā)人員的機(jī)器上重新設(shè)置數(shù)據(jù)庫連接字符串了。
關(guān)于“ASP.NET Core怎么在開發(fā)環(huán)境保存機(jī)密User Secrets”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。