ASP.NET Core での開発中のアプリ シークレットの安全な格納Safe storage of app secrets in development in ASP.NET Core

によってRick AndersonDaniel Roth、およびScott AddieBy Rick Anderson, Daniel Roth, and Scott Addie

サンプル コードを表示またはダウンロードします (ダウンロード方法)。View or download sample code (how to download)

このドキュメントでは、格納して、ASP.NET Core アプリの開発時に機密データを取得するための手法について説明します。This document explains techniques for storing and retrieving sensitive data during the development of an ASP.NET Core app. ソース コードでパスワードや他の機密データを保存しないでください。Never store passwords or other sensitive data in source code. 運用シークレットを使用してはならない開発やテストします。Production secrets shouldn't be used for development or test. Azure Key Vault 構成プロバイダーにより、Azure テストと運用のシークレットを格納し、保護することが可能です。You can store and protect Azure test and production secrets with the Azure Key Vault configuration provider.

環境変数Environment variables

環境変数は、コードまたはローカルの構成ファイルでのアプリ シークレットのストレージを回避するために使用されます。Environment variables are used to avoid storage of app secrets in code or in local configuration files. 環境変数は、以前に指定した構成のすべてのソースの構成値をオーバーライドします。Environment variables override configuration values for all previously specified configuration sources.

環境変数の値の読み取りを呼び出すことによって構成AddEnvironmentVariablesで、Startupコンス トラクター。Configure the reading of environment variable values by calling AddEnvironmentVariables in the Startup constructor:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", 
                     optional: false, 
                     reloadOnChange: true)
        .AddEnvironmentVariables();

    if (env.IsDevelopment())
    {
        builder.AddUserSecrets<Startup>();
    }

    Configuration = builder.Build();
}

ASP.NET Core web アプリを検討してください個々 のユーザー アカウントセキュリティを有効にします。Consider an ASP.NET Core web app in which Individual User Accounts security is enabled. プロジェクトの既定のデータベース接続文字列が含まれているappsettings.jsonキーを持つファイルDefaultConnectionします。A default database connection string is included in the project's appsettings.json file with the key DefaultConnection. 既定の接続文字列は、LocalDB では、ユーザー モードで実行し、パスワードを必要としないからです。The default connection string is for LocalDB, which runs in user mode and doesn't require a password. アプリのデプロイ時に、DefaultConnectionキーの値を環境変数の値で上書きすることができます。During app deployment, the DefaultConnection key value can be overridden with an environment variable's value. 環境変数には、機密の資格情報の完全な接続文字列を格納できます。The environment variable may store the complete connection string with sensitive credentials.

警告

環境変数は、暗号化されていないプレーン テキストで一般的に格納されます。Environment variables are generally stored in plain, unencrypted text. コンピューターまたはプロセスが侵害された場合、環境変数は、信頼されていないパーティによってアクセスできます。If the machine or process is compromised, environment variables can be accessed by untrusted parties. ユーザーの機密情報の漏えいを防ぐためにその他の対策は、必要な可能性があります。Additional measures to prevent disclosure of user secrets may be required.

環境変数内で階層キーを操作する場合、コロン区切り (:) がすべてのプラットフォームでは機能しない場合があります (Bash など)。When working with hierarchical keys in environment variables, a colon separator (:) may not work on all platforms (for example, Bash). 二重のアンダースコア (__) はすべてのプラットフォームでサポートされ、コロンに置換されます。A double underscore (__) is supported by all platforms and is replaced by a colon.

Secret ManagerSecret Manager

Secret Manager ツールは、ASP.NET Core プロジェクトの開発時に機密データを格納します。The Secret Manager tool stores sensitive data during the development of an ASP.NET Core project. このコンテキストでは、機密データの一部は、アプリのシークレットは。In this context, a piece of sensitive data is an app secret. アプリ シークレットは、プロジェクト ツリーから別の場所に格納されます。App secrets are stored in a separate location from the project tree. アプリ シークレットは、特定のプロジェクトに関連付けられているか、いくつかのプロジェクト間で共有します。The app secrets are associated with a specific project or shared across several projects. アプリ シークレットは、ソース管理にチェックインされません。The app secrets aren't checked into source control.

警告

Secret Manager ツールでは、保存されたシークレットを暗号化しないし、信頼できるストアとして扱うべきではありません。The Secret Manager tool doesn't encrypt the stored secrets and shouldn't be treated as a trusted store. 開発目的でのみです。It's for development purposes only. キーと値は、ユーザー プロファイル ディレクトリ内の JSON 構成ファイルに格納されます。The keys and values are stored in a JSON configuration file in the user profile directory.

Secret Manager ツールのしくみHow the Secret Manager tool works

値が格納されている場所と方法など、実装の詳細を抽象 Secret Manager ツール。The Secret Manager tool abstracts away the implementation details, such as where and how the values are stored. これらの実装の詳細を知ることがなくツールを使用することができます。You can use the tool without knowing these implementation details. 値は、ローカル コンピューターのシステムで保護されているユーザーのプロファイル フォルダーに JSON 構成ファイルに格納されます。The values are stored in a JSON configuration file in a system-protected user profile folder on the local machine:

ファイル システム パス:File system path:

%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json

上記の「ファイル パスは、置換<user_secrets_id>で、UserSecretsIdで指定された値、 .csprojファイル。In the preceding file paths, replace <user_secrets_id> with the UserSecretsId value specified in the .csproj file.

場所または Secret Manager ツールを使用して保存データの形式に依存するコードを記述しません。Don't write code that depends on the location or format of data saved with the Secret Manager tool. これらの実装の詳細を変更することがあります。These implementation details may change. たとえば、シークレットの値は暗号化されませんが、今後可能性があります。For example, the secret values aren't encrypted, but could be in the future.

Secret Manager ツールをインストールします。Install the Secret Manager tool

Secret Manager ツールは、.NET Core SDK 2.1.300 で .NET Core CLI を使用してバンドル以降です。The Secret Manager tool is bundled with the .NET Core CLI in .NET Core SDK 2.1.300 or later. 2.1.300 より前に、のバージョンを .NET Core SDK、ツールのインストールする必要があります。For .NET Core SDK versions before 2.1.300, tool installation is necessary.

ヒント

実行dotnet --versionからコマンド シェルをインストール済みの .NET Core SDK バージョン番号を参照してください。Run dotnet --version from a command shell to see the installed .NET Core SDK version number.

使用されている .NET Core SDK には、ツールが含まれている場合は、警告が表示されます。A warning is displayed if the .NET Core SDK being used includes the tool:

The tool 'Microsoft.Extensions.SecretManager.Tools' is now included in the .NET Core SDK. Information on resolving this warning is available at (https://aka.ms/dotnetclitools-in-box).

インストール、 Microsoft.Extensions.SecretManager.Tools ASP.NET Core プロジェクトで NuGet パッケージ。Install the Microsoft.Extensions.SecretManager.Tools NuGet package in your ASP.NET Core project. 例:For example:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <UserSecretsId>1242d6d6-9df3-4031-b031-d9b27d13c25a</UserSecretsId>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" 
                      Version="1.1.6" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" 
                      Version="1.1.2" />
    <PackageReference Include="System.Data.SqlClient" 
                      Version="4.5.0" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" 
                            Version="1.0.1" />
  </ItemGroup>
</Project>

ツールのインストールを検証するコマンド シェルで次のコマンドを実行します。Execute the following command in a command shell to validate the tool installation:

dotnet user-secrets -h

Secret Manager ツールには、サンプルの使用法、オプション、およびコマンドのヘルプが表示されます。The Secret Manager tool displays sample usage, options, and command help:

Usage: dotnet user-secrets [options] [command]

Options:
  -?|-h|--help                        Show help information
  --version                           Show version information
  -v|--verbose                        Show verbose output
  -p|--project <PROJECT>              Path to project. Defaults to searching the current directory.
  -c|--configuration <CONFIGURATION>  The project configuration to use. Defaults to 'Debug'.
  --id                                The user secret ID to use.

Commands:
  clear   Deletes all the application secrets
  list    Lists all the application secrets
  remove  Removes the specified user secret
  set     Sets the user secret to the specified value

Use "dotnet user-secrets [command] --help" for more information about a command.

注意

同じディレクトリである必要があります、 .csprojファイルで定義されているツールを実行する、 .csprojファイルのDotNetCliToolReference要素。You must be in the same directory as the .csproj file to run tools defined in the .csproj file's DotNetCliToolReference elements.

機密情報のストレージを有効にします。Enable secret storage

Secret Manager ツールは、ユーザー プロファイルに格納されているプロジェクト固有の構成設定では動作します。The Secret Manager tool operates on project-specific configuration settings stored in your user profile.

Secret Manager ツールが含まれています、initで .NET Core SDK 3.0.100 コマンドまたはそれ以降。The Secret Manager tool includes an init command in .NET Core SDK 3.0.100 or later. ユーザー シークレットを使用するには、プロジェクト ディレクトリに、次のコマンドを実行します。To use user secrets, run the following command in the project directory:

dotnet user-secrets init

上記のコマンドを追加、UserSecretsId内の要素をPropertyGroup.csprojファイル。The preceding command adds a UserSecretsId element within a PropertyGroup of the .csproj file. 既定での内部テキ ストUserSecretsIdは GUID です。By default, the inner text of UserSecretsId is a GUID. 内部テキ ストは任意で、プロジェクトに一意です。The inner text is arbitrary, but is unique to the project.

ユーザー シークレットを使用する定義をUserSecretsId内の要素をPropertyGroup.csprojファイル。To use user secrets, define a UserSecretsId element within a PropertyGroup of the .csproj file. 内部テキ ストUserSecretsIdは任意ですが、プロジェクトに一意です。The inner text of UserSecretsId is arbitrary, but is unique to the project. 開発者は通常の GUID を生成、UserSecretsIdします。Developers typically generate a GUID for the UserSecretsId.

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  <UserSecretsId>79a3edd0-2092-40a2-a04d-dcb46d5ca9ed</UserSecretsId>
</PropertyGroup>
<PropertyGroup>
  <TargetFramework>netcoreapp1.1</TargetFramework>
  <UserSecretsId>1242d6d6-9df3-4031-b031-d9b27d13c25a</UserSecretsId>
</PropertyGroup>

ヒント

Visual Studio では、ソリューション エクスプ ローラーでプロジェクトを右クリックしてユーザー シークレットの管理コンテキスト メニュー。In Visual Studio, right-click the project in Solution Explorer, and select Manage User Secrets from the context menu. このジェスチャを追加、UserSecretsIdに GUID が設定されている要素、 .csprojファイル。This gesture adds a UserSecretsId element, populated with a GUID, to the .csproj file.

シークレットを設定します。Set a secret

キーとその値から成るアプリのシークレットを定義します。Define an app secret consisting of a key and its value. シークレットは、プロジェクトの関連付けUserSecretsId値。The secret is associated with the project's UserSecretsId value. たとえば、先のディレクトリから次のコマンドを実行、 .csprojファイルが存在します。For example, run the following command from the directory in which the .csproj file exists:

dotnet user-secrets set "Movies:ServiceApiKey" "12345"

前の例では、コロンのあることを示しますMoviesはオブジェクトのリテラルをServiceApiKeyプロパティ。In the preceding example, the colon denotes that Movies is an object literal with a ServiceApiKey property.

Secret Manager ツールは、その他のディレクトリからも使用できます。The Secret Manager tool can be used from other directories too. 使用して、--projectをファイル システム パスを指定するオプション、 .csprojファイルが存在します。Use the --project option to supply the file system path at which the .csproj file exists. 例:For example:

dotnet user-secrets set "Movies:ServiceApiKey" "12345" --project "C:\apps\WebApp1\src\WebApp1"

Visual Studio でのフラット化する JSON 構造体JSON structure flattening in Visual Studio

Visual Studio のユーザー シークレットの管理ジェスチャが開き、 secrets.jsonテキスト エディターでファイル。Visual Studio's Manage User Secrets gesture opens a secrets.json file in the text editor. 内容を置き換えるsecrets.jsonキーと値のペアを格納するとします。Replace the contents of secrets.json with the key-value pairs to be stored. 例:For example:

{
  "Movies": {
    "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
    "ServiceApiKey": "12345"
  }
}

使用して変更した後、JSON の構造がフラット化dotnet user-secrets removeまたはdotnet user-secrets setします。The JSON structure is flattened after modifications via dotnet user-secrets remove or dotnet user-secrets set. たとえば、実行しているdotnet user-secrets remove "Movies:ConnectionString"折りたたみます、Moviesオブジェクト リテラル。For example, running dotnet user-secrets remove "Movies:ConnectionString" collapses the Movies object literal. 変更したファイルには、次のようになります。The modified file resembles the following:

{
  "Movies:ServiceApiKey": "12345"
}

複数のシークレットを設定します。Set multiple secrets

JSON をパイプしてシークレットのバッチを設定することができます、setコマンド。A batch of secrets can be set by piping JSON to the set command. 次の例では、 input.jsonファイルの内容はパイプを使用して、setコマンド。In the following example, the input.json file's contents are piped to the set command.

コマンド シェルを開き、次のコマンドを実行します。Open a command shell, and execute the following command:

type .\input.json | dotnet user-secrets set

シークレットにアクセスします。Access a secret

ASP.NET Core 構成 API Secret Manager シークレットへのアクセスを提供します。The ASP.NET Core Configuration API provides access to Secret Manager secrets.

プロジェクトが .NET Framework を対象とする場合は、インストール、 Microsoft.Extensions.Configuration.UserSecrets NuGet パッケージ。If your project targets .NET Framework, install the Microsoft.Extensions.Configuration.UserSecrets NuGet package.

ASP.NET Core 2.0 以降では、ユーザー シークレット構成ソースが自動的に追加の開発モードで、プロジェクトを呼び出すとCreateDefaultBuilder事前構成済みの既定値を持つホストの新しいインスタンスを初期化します。In ASP.NET Core 2.0 or later, the user secrets configuration source is automatically added in development mode when the project calls CreateDefaultBuilder to initialize a new instance of the host with preconfigured defaults. CreateDefaultBuilder 呼び出しAddUserSecretsときに、EnvironmentNameDevelopment:CreateDefaultBuilder calls AddUserSecrets when the EnvironmentName is Development:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>();

ときにCreateDefaultBuilderいない呼び出すことによって、ユーザー シークレット構成ソースを明示的に追加呼び出されると、AddUserSecretsで、Startupコンス トラクター。When CreateDefaultBuilder isn't called, add the user secrets configuration source explicitly by calling AddUserSecrets in the Startup constructor. 呼び出すAddUserSecretsのみ実行すると、アプリ開発環境で次の例に示すようにします。Call AddUserSecrets only when the app runs in the Development environment, as shown in the following example:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", 
                     optional: false, 
                     reloadOnChange: true)
        .AddEnvironmentVariables();

    if (env.IsDevelopment())
    {
        builder.AddUserSecrets<Startup>();
    }

    Configuration = builder.Build();
}

インストール、 Microsoft.Extensions.Configuration.UserSecrets NuGet パッケージ。Install the Microsoft.Extensions.Configuration.UserSecrets NuGet package.

呼び出してユーザー シークレット構成ソースの追加AddUserSecretsで、Startupコンス トラクター。Add the user secrets configuration source with a call to AddUserSecrets in the Startup constructor:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", 
                     optional: false, 
                     reloadOnChange: true)
        .AddEnvironmentVariables();

    if (env.IsDevelopment())
    {
        builder.AddUserSecrets<Startup>();
    }

    Configuration = builder.Build();
}

ユーザー シークレットを取得できます、 Configuration API:User secrets can be retrieved via the Configuration API:

public class Startup
{
    private string _moviesApiKey = null;

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        _moviesApiKey = Configuration["Movies:ServiceApiKey"];
    }

    public void Configure(IApplicationBuilder app)
    {
        var result = string.IsNullOrEmpty(_moviesApiKey) ? "Null" : "Not Null";
        app.Run(async (context) =>
        {
            await context.Response.WriteAsync($"Secret is {result}");
        });
    }
}
public class Startup
{
    private string _moviesApiKey = null;
    
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", 
                         optional: false, 
                         reloadOnChange: true)
            .AddEnvironmentVariables();

        if (env.IsDevelopment())
        {
            builder.AddUserSecrets<Startup>();
        }

        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        _moviesApiKey = Configuration["Movies:ServiceApiKey"];
    }

    public void Configure(IApplicationBuilder app)
    {
        var result = string.IsNullOrEmpty(_moviesApiKey) ? "Null" : "Not Null";
        app.Run(async (context) =>
        {
            await context.Response.WriteAsync($"Secret is {result}");
        });
    }
}

POCO に機密情報をマップします。Map secrets to a POCO

POCO (単純な .NET クラスのプロパティを持つ) への全体のオブジェクト リテラルのマッピングは、関連するプロパティを集約するために役立ちます。Mapping an entire object literal to a POCO (a simple .NET class with properties) is useful for aggregating related properties.

アプリの想定secrets.jsonファイルには、次の 2 つのシークレットが含まれています。Assume the app's secrets.json file contains the following two secrets:

{
  "Movies": {
    "ServiceApiKey": "12345",
    "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

上記のシークレットを POCO をマップするには使用、 Configuration API のオブジェクト グラフのバインド機能します。To map the preceding secrets to a POCO, use the Configuration API's object graph binding feature. 次のコードにカスタム バインドMovieSettingsPOCO およびアクセス、ServiceApiKeyプロパティの値。The following code binds to a custom MovieSettings POCO and accesses the ServiceApiKey property value:

var moviesConfig = Configuration.GetSection("Movies")
                                .Get<MovieSettings>();
_moviesApiKey = moviesConfig.ServiceApiKey;
var moviesConfig = new MovieSettings();
Configuration.GetSection("Movies").Bind(moviesConfig);
_moviesApiKey = moviesConfig.ServiceApiKey;

Movies:ConnectionStringMovies:ServiceApiKeyシークレットは、それぞれのプロパティにマップされますMovieSettings:The Movies:ConnectionString and Movies:ServiceApiKey secrets are mapped to the respective properties in MovieSettings:

public class MovieSettings
{
    public string ConnectionString { get; set; }

    public string ServiceApiKey { get; set; }
}

秘密情報の文字列の置換String replacement with secrets

プレーン テキストでパスワードを格納することは安全ではありません。Storing passwords in plain text is insecure. たとえば、データベース接続文字列に格納されているappsettings.json指定したユーザーのパスワードを含めることができます。For example, a database connection string stored in appsettings.json may include a password for the specified user:

{
  "ConnectionStrings": {
    "Movies": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;User Id=johndoe;Password=pass123;MultipleActiveResultSets=true"
  }
}

安全なアプローチでは、パスワードをシークレットとして格納します。A more secure approach is to store the password as a secret. 例えば:For example:

dotnet user-secrets set "DbPassword" "pass123"

削除、Passwordキー/値ペア内の接続文字列からappsettings.jsonします。Remove the Password key-value pair from the connection string in appsettings.json. 例:For example:

{
  "ConnectionStrings": {
    "Movies": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;User Id=johndoe;MultipleActiveResultSets=true"
  }
}

シークレットの値を設定することができます、SqlConnectionStringBuilderオブジェクトのPassword接続文字列を完了するプロパティ。The secret's value can be set on a SqlConnectionStringBuilder object's Password property to complete the connection string:

public class Startup
{
    private string _connection = null;

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        var builder = new SqlConnectionStringBuilder(
            Configuration.GetConnectionString("Movies"));
        builder.Password = Configuration["DbPassword"];
        _connection = builder.ConnectionString;
    }

    public void Configure(IApplicationBuilder app)
    {
        app.Run(async (context) =>
        {
            await context.Response.WriteAsync($"DB Connection: {_connection}");
        });
    }
}
public class Startup
{
    private string _connection = null;
    
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json",
                         optional: false,
                         reloadOnChange: true)
            .AddEnvironmentVariables();

        if (env.IsDevelopment())
        {
            builder.AddUserSecrets<Startup>();
        }

        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        var builder = new SqlConnectionStringBuilder(
            Configuration.GetConnectionString("Movies"));
        builder.Password = Configuration["DbPassword"];
        _connection = builder.ConnectionString;
    }

    public void Configure(IApplicationBuilder app)
    {
        app.Run(async (context) =>
        {
            await context.Response.WriteAsync($"DB Connection: {_connection}");
        });
    }
}

シークレットの一覧表示します。List the secrets

アプリの想定secrets.jsonファイルには、次の 2 つのシークレットが含まれています。Assume the app's secrets.json file contains the following two secrets:

{
  "Movies": {
    "ServiceApiKey": "12345",
    "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

ディレクトリから次のコマンドを実行、 .csprojファイルが存在します。Run the following command from the directory in which the .csproj file exists:

dotnet user-secrets list

次の出力が表示されます。The following output appears:

Movies:ConnectionString = Server=(localdb)\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true
Movies:ServiceApiKey = 12345

前の例では、キー名にコロンが内のオブジェクト階層を示しています。 secrets.jsonします。In the preceding example, a colon in the key names denotes the object hierarchy within secrets.json.

1 つのシークレットを削除します。Remove a single secret

アプリの想定secrets.jsonファイルには、次の 2 つのシークレットが含まれています。Assume the app's secrets.json file contains the following two secrets:

{
  "Movies": {
    "ServiceApiKey": "12345",
    "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

ディレクトリから次のコマンドを実行、 .csprojファイルが存在します。Run the following command from the directory in which the .csproj file exists:

dotnet user-secrets remove "Movies:ConnectionString"

アプリのsecrets.jsonに関連付けられているキー/値ペアを削除するファイルが変更された、MoviesConnectionStringキー。The app's secrets.json file was modified to remove the key-value pair associated with the MoviesConnectionString key:

{
  "Movies": {
    "ServiceApiKey": "12345"
  }
}

実行しているdotnet user-secrets list次のメッセージが表示されます。Running dotnet user-secrets list displays the following message:

Movies:ServiceApiKey = 12345

すべてのシークレットを削除します。Remove all secrets

アプリの想定secrets.jsonファイルには、次の 2 つのシークレットが含まれています。Assume the app's secrets.json file contains the following two secrets:

{
  "Movies": {
    "ServiceApiKey": "12345",
    "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

ディレクトリから次のコマンドを実行、 .csprojファイルが存在します。Run the following command from the directory in which the .csproj file exists:

dotnet user-secrets clear

アプリのすべてのユーザーの機密情報が削除されて、 secrets.jsonファイル。All user secrets for the app have been deleted from the secrets.json file:

{}

実行しているdotnet user-secrets list次のメッセージが表示されます。Running dotnet user-secrets list displays the following message:

No secrets configured for this application.

その他の技術情報Additional resources