ホームページ  >  記事  >  バックエンド開発  >  Core が ASP.NET の開発環境でシークレット (ユーザー シークレット) をエレガントに保存する方法の詳細な説明

Core が ASP.NET の開発環境でシークレット (ユーザー シークレット) をエレガントに保存する方法の詳細な説明

黄舟
黄舟オリジナル
2017-05-28 10:14:551770ブラウズ

この記事では、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/291d8de402df09abb5ccc62c3f9cde7e/secrets.json

Windows システムの場合、その場所は

C:Users usernameAppDataRoamingMicrosoftUserSecretsaspnet-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 中对于开发人员还是非常贴心的,很多小细节都考虑到了,因此在我们构建应用程序的过程中,可以多使用这些小功能(特性)来让我们的代码更加的优雅~

以上がCore が ASP.NET の開発環境でシークレット (ユーザー シークレット) をエレガントに保存する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。