ホームページ >バックエンド開発 >C#.Net チュートリアル >開発環境で ASP.NET Core のシークレット (ユーザー シークレット) を保存する例を共有する
この記事では、ASP.NET Core が開発環境でユーザー シークレットをエレガントに保存する方法を主に詳しく紹介します。これには特定の参考値があります。
前書き
暗号化キー、文字列、ユーザー名とパスワードなどの一部の機密情報をコードに保存する必要があります。通常のアプローチは、構成ファイル に保存することです。しかし、ASP.NET Core では、この方法が変更されているか、より多様な方法がある可能性があります。これらの機密情報を設定または保存するためのより洗練された構成も含まれています。
最初は、この UserSecrets は役に立たないと思っていました。なぜなら、何かを設定する必要がある場合は、appsetting.json ファイルに直接設定できるからです。開発プロセスになって初めて、その本当の意味を感じました。使う。
目次
ユーザー シークレットの概要
ユーザー シークレットの追加方法
アプリでのユーザー シークレットの使用
概要
ユーザー機密紹介
前のコードでどのように処理したかをシナリオで考えてみましょう:
WeChat や Weibo サイトで使用されるアプリキーなど、サードパーティの Web サイトに接続するためにいくつかのキーを保存する必要があります
それぞれの開発者は、いくつかのリソースにアクセスするために異なるユーザー名とパスワードを設定します
開発者は、開発プロセス中に独自のローカルデータベースを使用します データベースアドレス、アカウント、パスワードを設定する方法
最後の項目は、それぞれであると仮定します。開発に独自のローカル データベースを使用したい場合は、全員が自分の web.config を変更する必要があり、コードを送信するときにそれを送信しないでくださいと言うかもしれません。したがって、他の構成項目を web.config に追加する場合、web.config ファイルを送信しないのは明らかに不合理です。
現在、ASP.NET Core は、この問題の解決に役立つ非常にエレガントで簡潔な方法のユーザー シークレットを提供しています。
新しい ASP.NET Core Web アプリケーションを作成すると、Startup.cs ファイルに次のコードが表示されます。
public Startup(IHostingEnvironment env) { ..... if (env.IsDevelopment()) { builder.AddUserSecrets(); } builder.AddEnvironmentVariables(); }
project.json ファイルには、関連するユーザー シークレットがいくつか表示されます。
{ "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 は、プロジェクトのユーザー シークレットを一意に識別するために使用されます。異なるシークレットを使用する必要があるプロジェクトが 2 つある場合、それらのプロジェクトには異なる userSecretsId が必要です。
Microsoft.Extensions.SecretManager.Tools 主にシークレットの値を設定または表示するために使用されます。
ユーザー シークレットを追加する方法
コマンド ラインで次のコマンドを使用して次を追加できます:
image
コマンド ライン ウィンドウをプログラムの実行ディレクトリに切り替え、「 dotnet user-secrets」と入力します。 -h 使用できるコマンドを表示します
dotnet user-secrets リストを使用しますすべてのユーザー シークレットをリストします
Use dotnet user-secrets set WeChatAppKey "X3423FEED2435DD" ユーザー シークレットを設定します。WebChatAppKey はキー、以下は値です。
次に、dotnet user-secrets list を使用して、設定されたキーと値のペアを表示します。
次に、データベース接続文字列を設定します。
上記は、コマンド ラインを使用してユーザー シークレットを設定する方法です。コマンド ラインの代わりに Visual Studio 2015 を使用してこの作業を行うこともできます。
Visual Studio で Web プロジェクトを右クリックすると、ユーザー シークレットの管理 メニューが表示されます:
画像
クリックして開くと、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和Span8742468051c85b06f0a0af9e3e506b5c提高程序性能的实现代码
以上が開発環境で ASP.NET Core のシークレット (ユーザー シークレット) を保存する例を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。