Sejf ukládání tajných kódů aplikací ve vývoji v ASP.NET Core

Od Rick Anderson a Kirka Larkin

Zobrazit nebo stáhnout ukázkový kód (Jak stáhnout)

tento dokument vysvětluje, jak spravovat citlivá data pro ASP.NET Core aplikaci na vývojovém počítači. Nikdy neukládejte hesla nebo další citlivá data ve zdrojovém kódu. Provozní tajemství by se neměla používat pro vývoj nebo testování. Tajné klíče by se neměly nasazovat spolu s aplikací. Místo toho by se měly k produkčním tajným prostředkům přistupovat prostřednictvím řízených prostředků, například proměnných prostředí nebo Azure Key Vault. Pomocí poskytovatele konfigurace Azure Key Vaultmůžete ukládat a chránit tajné kódy Azure test a produkčního prostředí.

Proměnné prostředí

Proměnné prostředí se používají k tomu, aby nedocházelo k ukládání tajných klíčů k aplikacím v kódu nebo v místních konfiguračních souborech. Proměnné prostředí přepíšou konfigurační hodnoty pro všechny dříve zadané zdroje konfigurace.

vezměte v úvahu ASP.NET Core webovou aplikaci, ve které je povolené zabezpečení individuálních uživatelských účtů . Výchozí připojovací řetězec databáze je obsažen v appsettings.json souboru projektu s klíčem DefaultConnection . Výchozí připojovací řetězec je pro LocalDB, který běží v uživatelském režimu a nevyžaduje heslo. Během nasazování aplikace se DefaultConnection hodnota klíče dá přepsat hodnotou proměnné prostředí. Proměnná prostředí může ukládat úplný připojovací řetězec s citlivými přihlašovacími údaji.

Upozornění

Proměnné prostředí se většinou ukládají v prostém, nešifrovaném textu. Pokud dojde k ohrožení bezpečnosti počítače nebo procesu, jsou proměnné prostředí dostupné nedůvěryhodnými stranami. Další opatření, která zabraňují odhalení tajných kódů uživateli, mohou být povinná.

:Oddělovač nefunguje s hierarchickými klíči proměnné prostředí na všech platformách. __, je dvojité podtržítko:

  • Podporováno všemi platformami. Například : oddělovač není podporován bash, ale __ je.
  • Automaticky nahrazeno :

Správce tajných klíčů

nástroj správce tajných klíčů ukládá citlivé údaje během vývoje ASP.NET Core projektu. V tomto kontextu je část citlivých dat tajný klíč aplikace. Tajné klíče aplikace se ukládají v odděleném umístění ze stromu projektu. Tajné klíče aplikace jsou přidruženy k určitému projektu nebo sdíleny napříč několika projekty. Tajné kódy aplikace nejsou zaregistrovány do správy zdrojového kódu.

Upozornění

Nástroj Správce tajných klíčů nešifruje uložené tajné klíče a neměl by být považován za důvěryhodné úložiště. Pouze pro účely vývoje. Klíče a hodnoty jsou uložené v konfiguračním souboru JSON v adresáři profilu uživatele.

Jak funguje nástroj Správce tajných klíčů

Nástroj Správce tajných klíčů skrývá podrobnosti implementace, například WHERE a způsob uložení hodnot. Tento nástroj můžete použít bez znalosti těchto podrobností implementace. Hodnoty jsou uloženy v souboru JSON ve složce profilu uživatele místního počítače:

Cesta k systému souborů:

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

V předchozích cestách souborů nahraďte <user_secrets_id> UserSecretsId hodnotou zadanou v souboru projektu.

Nepište kód, který závisí na umístění nebo formátu dat uložených pomocí nástroje Správce tajných klíčů. Tyto podrobnosti implementace se můžou změnit. Například tajné hodnoty nejsou šifrovány, ale mohou být v budoucnu.

Povolit tajné úložiště

Nástroj Správce tajných klíčů pracuje na nastavení konfigurace specifické pro projekt uložené v profilu uživatele.

Nástroj Správce tajných klíčů obsahuje init příkaz. Chcete-li použít tajné klíče uživatele, spusťte následující příkaz v adresáři projektu:

dotnet user-secrets init

Předchozí příkaz přidá UserSecretsId prvek v rámci PropertyGroup souboru projektu. Ve výchozím nastavení je vnitřní text pro UserSecretsId identifikátor GUID. Vnitřní text je libovolný, ale je pro projekt jedinečný.

<PropertyGroup>
  <TargetFramework>netcoreapp3.1</TargetFramework>
  <UserSecretsId>79a3edd0-2092-40a2-a04d-dcb46d5ca9ed</UserSecretsId>
</PropertyGroup>

v Visual Studio klikněte pravým tlačítkem myši na projekt v Průzkumník řešení a v místní nabídce vyberte možnost spravovat tajné klíče uživatele . Tento gesto přidá UserSecretsId prvek, který je vyplněn identifikátorem GUID, do souboru projektu.

Nastavení tajného klíče

Definujte tajný klíč aplikace skládající se z klíče a jeho hodnoty. Tajný kód je přidružený k UserSecretsId hodnotě projektu. Například spusťte následující příkaz z adresáře, ve kterém existuje soubor projektu:

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

V předchozím příkladu dvojtečka označuje Movies literál objektu s ServiceApiKey vlastností.

Nástroj Správce tajných klíčů je možné použít i v jiných adresářích. Pomocí --project Možnosti zadejte cestu k systému souborů, na které existuje soubor projektu. Například:

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

Sloučení struktury JSON v Visual Studio

gesto správa tajných klíčů uživatele Visual Studio otevře soubor tajných kódů. json v textovém editoru. Nahraďte obsah tajných klíčů. JSON páry klíč-hodnota, které se mají uložit. Například:

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

Struktura JSON je po úpravách prostřednictvím dotnet user-secrets remove nebo. shrnuta dotnet user-secrets set . Například spuštění dotnet user-secrets remove "Movies:ConnectionString" sbalí Movies literál objektu. Změněný soubor se podobá následujícímu formátu JSON:

{
  "Movies:ServiceApiKey": "12345"
}

Nastavení více tajných klíčů

Dávku tajných kódů lze nastavit pomocí set příkazuového řádku JSON pro příkaz. V následujícím příkladu je obsah souboru input. JSON v kanálu do set příkazu.

Otevřete příkazové prostředí a spusťte následující příkaz:

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

Přístup ke tajnému kódu

Chcete-li získat přístup ke tajnému kódu, proveďte následující kroky:

  1. Zaregistrujte zdroj konfigurace tajných klíčů uživatele.
  2. Přečtěte si tajný klíč prostřednictvím konfiguračního rozhraní API.

Zaregistrujte zdroj konfigurace tajných klíčů uživatele.

Poskytovatel konfigurace uživatelských tajných klíčů registruje příslušný zdroj konfigurace s rozhraním API konfigurace.NET.

ASP.NET Core webové aplikace vytvořené pomocí příkazu dotnet new nebo Visual Studio vygenerujte následující kód:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

WebApplication. CreateBuilder Inicializuje novou instanci WebApplicationBuilder třídy s předem konfigurovanými výchozími hodnotami. Inicializovaná WebApplicationBuilder ( builder ) poskytuje výchozí konfiguraci a volání, AddUserSecrets Když EnvironmentName je Development :

Přečtěte si tajný klíč prostřednictvím konfiguračního rozhraní API.

Vezměte v úvahu následující příklady čtení Movies:ServiceApiKey klíče:

Soubor programu. cs:

var builder = WebApplication.CreateBuilder(args);
var movieApiKey = builder.Configuration["Movies:ServiceApiKey"];

var app = builder.Build();

app.MapGet("/", () => movieApiKey);

app.Run();

Razor Page model stránky:

public class IndexModel : PageModel
{
    private readonly IConfiguration _config;

    public IndexModel(IConfiguration config)
    {
        _config = config;
    }

    public void OnGet()
    {
        var moviesApiKey = _config["Movies:ServiceApiKey"];

        // call Movies service with the API key
    }
}

Další informace naleznete v tématu Konfigurace v ASP.NET Core.

Mapování tajných kódů na POCO

Mapování celého literálu objektu na POCO (jednoduchá třída .NET s vlastnostmi) je užitečná pro agregaci souvisejících vlastností.

Předpokládejme, že soubor secrets.jsobsahuje následující dva tajné kódy:

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

K namapování předchozích tajných kódů na POCO použijte funkci vazby grafu rozhraní API pro rozhraní .NET Configuration API. Následující kód se váže k vlastnímu MovieSettings POCO a přistupuje k ServiceApiKey hodnotě vlastnosti:

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

Movies:ConnectionStringTajné kódy a Movies:ServiceApiKey jsou mapovány na příslušné vlastnosti v MovieSettings :

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

    public string ServiceApiKey { get; set; }
}

Výměna řetězců s tajnými kódy

Ukládání hesel v prostém textu je nezabezpečené. Připojovací řetězec databáze uložený v appsettings.json může například zahrnovat heslo pro zadaného uživatele:

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

Bezpečnější je ukládání hesla jako tajného klíče. Například:

dotnet user-secrets set "DbPassword" "pass123"

Odeberte Password dvojici klíč-hodnota z připojovacího řetězce v appsettings.json . Například:

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

Hodnota tajného klíče může být nastavena na SqlConnectionStringBuilder Password vlastnost objektu pro dokončení připojovacího řetězce:

using System.Data.SqlClient;

var builder = WebApplication.CreateBuilder(args);

var conStrBuilder = new SqlConnectionStringBuilder(
        builder.Configuration.GetConnectionString("Movies"));
conStrBuilder.Password = builder.Configuration["DbPassword"];
var connection = conStrBuilder.ConnectionString;

var app = builder.Build();

app.MapGet("/", () => connection);

app.Run();

Výpis tajných kódů

Předpokládejme, že soubor secrets.jsobsahuje následující dva tajné kódy:

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

Z adresáře, ve kterém existuje soubor projektu, spusťte následující příkaz:

dotnet user-secrets list

Objeví se následující výstup:

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

V předchozím příkladu dvojtečka v názvech klíčů označuje hierarchii objektů v rámci tajných kódů. JSON.

Odebrání jednoho tajného klíče

Předpokládejme, že soubor secrets.jsobsahuje následující dva tajné kódy:

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

Z adresáře, ve kterém existuje soubor projektu, spusťte následující příkaz:

dotnet user-secrets remove "Movies:ConnectionString"

Soubor tajných kódů. JSON aplikace byl změněn tak, aby odstranil dvojici klíč-hodnota přidruženou ke MoviesConnectionString klíči:

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

dotnet user-secrets list zobrazí následující zprávu:

Movies:ServiceApiKey = 12345

Odebrat všechna tajná klíčová

Předpokládejme, že soubor secrets.jsobsahuje následující dva tajné kódy:

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

Z adresáře, ve kterém existuje soubor projektu, spusťte následující příkaz:

dotnet user-secrets clear

Všechny tajné klíče uživatele pro aplikaci byly odstraněny ze souboru tajných kódů. JSON :

{}

dotnet user-secrets listPři spuštění se zobrazí následující zpráva:

No secrets configured for this application.

Správa tajných klíčů uživatelů pomocí Visual Studio

pokud chcete spravovat tajné klíče uživatele v Visual Studio, klikněte pravým tlačítkem myši na projekt v průzkumníku řešení a vyberte spravovat uživatelské tajné klíče:

Visual Studio zobrazení správy tajných klíčů uživatelů

Další zdroje informací

Od Rick Anderson, Kirka Larkin, Daniel Skořepaa Scott Addie

Zobrazit nebo stáhnout ukázkový kód (Jak stáhnout)

tento dokument vysvětluje, jak spravovat citlivá data pro ASP.NET Core aplikaci na vývojovém počítači. Nikdy neukládejte hesla nebo další citlivá data ve zdrojovém kódu. Provozní tajemství by se neměla používat pro vývoj nebo testování. Tajné klíče by se neměly nasazovat spolu s aplikací. Místo toho by se měly k produkčním tajným prostředkům přistupovat prostřednictvím řízených prostředků, například proměnných prostředí nebo Azure Key Vault. Pomocí poskytovatele konfigurace Azure Key Vaultmůžete ukládat a chránit tajné kódy Azure test a produkčního prostředí.

Proměnné prostředí

Proměnné prostředí se používají k tomu, aby nedocházelo k ukládání tajných klíčů k aplikacím v kódu nebo v místních konfiguračních souborech. Proměnné prostředí přepíšou konfigurační hodnoty pro všechny dříve zadané zdroje konfigurace.

vezměte v úvahu ASP.NET Core webovou aplikaci, ve které je povolené zabezpečení individuálních uživatelských účtů . Výchozí připojovací řetězec databáze je obsažen v appsettings.json souboru projektu s klíčem DefaultConnection . Výchozí připojovací řetězec je pro LocalDB, který běží v uživatelském režimu a nevyžaduje heslo. Během nasazování aplikace se DefaultConnection hodnota klíče dá přepsat hodnotou proměnné prostředí. Proměnná prostředí může ukládat úplný připojovací řetězec s citlivými přihlašovacími údaji.

Upozornění

Proměnné prostředí se většinou ukládají v prostém, nešifrovaném textu. Pokud dojde k ohrožení bezpečnosti počítače nebo procesu, jsou proměnné prostředí dostupné nedůvěryhodnými stranami. Další opatření, která zabraňují odhalení tajných kódů uživateli, mohou být povinná.

:Oddělovač nefunguje s hierarchickými klíči proměnné prostředí na všech platformách. __, je dvojité podtržítko:

  • Podporováno všemi platformami. Například : oddělovač není podporován bash, ale __ je.
  • Automaticky nahrazeno :

Správce tajných klíčů

nástroj správce tajných klíčů ukládá citlivé údaje během vývoje ASP.NET Core projektu. V tomto kontextu je část citlivých dat tajný klíč aplikace. Tajné klíče aplikace se ukládají v odděleném umístění ze stromu projektu. Tajné klíče aplikace jsou přidruženy k určitému projektu nebo sdíleny napříč několika projekty. Tajné kódy aplikace nejsou zaregistrovány do správy zdrojového kódu.

Upozornění

Nástroj Správce tajných klíčů nešifruje uložené tajné klíče a neměl by být považován za důvěryhodné úložiště. Pouze pro účely vývoje. Klíče a hodnoty jsou uložené v konfiguračním souboru JSON v adresáři profilu uživatele.

Jak funguje nástroj Správce tajných klíčů

Nástroj Správce tajných klíčů skrývá podrobnosti implementace, například WHERE a způsob uložení hodnot. Tento nástroj můžete použít bez znalosti těchto podrobností implementace. Hodnoty jsou uloženy v souboru JSON ve složce profilu uživatele místního počítače:

Cesta k systému souborů:

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

V předchozích cestách souborů nahraďte <user_secrets_id> UserSecretsId hodnotou zadanou v souboru projektu.

Nepište kód, který závisí na umístění nebo formátu dat uložených pomocí nástroje Správce tajných klíčů. Tyto podrobnosti implementace se můžou změnit. Například tajné hodnoty nejsou šifrovány, ale mohou být v budoucnu.

Povolit tajné úložiště

Nástroj Správce tajných klíčů pracuje na nastavení konfigurace specifické pro projekt uložené v profilu uživatele.

Nástroj Správce tajných klíčů obsahuje init příkaz v .NET Core SDK 3.0.100 nebo novějším. Chcete-li použít tajné klíče uživatele, spusťte následující příkaz v adresáři projektu:

dotnet user-secrets init

Předchozí příkaz přidá UserSecretsId prvek v rámci PropertyGroup souboru projektu. Ve výchozím nastavení je vnitřní text pro UserSecretsId identifikátor GUID. Vnitřní text je libovolný, ale je pro projekt jedinečný.

<PropertyGroup>
  <TargetFramework>netcoreapp3.1</TargetFramework>
  <UserSecretsId>79a3edd0-2092-40a2-a04d-dcb46d5ca9ed</UserSecretsId>
</PropertyGroup>

v Visual Studio klikněte pravým tlačítkem myši na projekt v Průzkumník řešení a v místní nabídce vyberte možnost spravovat tajné klíče uživatele . Tento gesto přidá UserSecretsId prvek, který je vyplněn identifikátorem GUID, do souboru projektu.

Nastavení tajného klíče

Definujte tajný klíč aplikace skládající se z klíče a jeho hodnoty. Tajný kód je přidružený k UserSecretsId hodnotě projektu. Například spusťte následující příkaz z adresáře, ve kterém existuje soubor projektu:

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

V předchozím příkladu dvojtečka označuje Movies literál objektu s ServiceApiKey vlastností.

Nástroj Správce tajných klíčů je možné použít i v jiných adresářích. Pomocí --project Možnosti zadejte cestu k systému souborů, na které existuje soubor projektu. Například:

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

Sloučení struktury JSON v Visual Studio

gesto správa tajných klíčů uživatele Visual Studio otevře soubor tajných kódů. json v textovém editoru. Nahraďte obsah tajných klíčů. JSON páry klíč-hodnota, které se mají uložit. Například:

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

Struktura JSON je po úpravách prostřednictvím dotnet user-secrets remove nebo. shrnuta dotnet user-secrets set . Například spuštění dotnet user-secrets remove "Movies:ConnectionString" sbalí Movies literál objektu. Změněný soubor se podobá následujícímu formátu JSON:

{
  "Movies:ServiceApiKey": "12345"
}

Nastavení více tajných klíčů

Dávku tajných kódů lze nastavit pomocí set příkazuového řádku JSON pro příkaz. V následujícím příkladu je obsah souboru input. JSON v kanálu do set příkazu.

Otevřete příkazové prostředí a spusťte následující příkaz:

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

Přístup ke tajnému kódu

Chcete-li získat přístup ke tajnému kódu, proveďte následující kroky:

  1. Zaregistrujte zdroj konfigurace tajných klíčů uživatele.
  2. Přečtěte si tajný klíč prostřednictvím konfiguračního rozhraní API.

Zaregistrujte zdroj konfigurace tajných klíčů uživatele.

Poskytovatel konfigurace uživatelských tajných klíčů registruje příslušný zdroj konfigurace s rozhraním API konfigurace.NET.

Zdroj konfigurace uživatelských tajných klíčů je automaticky přidán do režimu vývoje při volání projektu CreateDefaultBuilder . CreateDefaultBuilder volá AddUserSecrets se, když EnvironmentName je Development :

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Pokud CreateDefaultBuilder není volána, přidejte zdroj konfigurace tajných klíčů uživatele explicitně voláním AddUserSecrets v ConfigureAppConfiguration . Volejte AddUserSecrets pouze v případě, že aplikace běží ve vývojovém prostředí, jak je znázorněno v následujícím příkladu:

public class Program
{
    public static void Main(string[] args)
    {
        var host = new HostBuilder()
            .ConfigureAppConfiguration((hostContext, builder) =>
            {
                // Add other providers for JSON, etc.

                if (hostContext.HostingEnvironment.IsDevelopment())
                {
                    builder.AddUserSecrets<Program>();
                }
            })
            .Build();
        
        host.Run();
    }
}

Přečtěte si tajný klíč prostřednictvím konfiguračního rozhraní API.

Pokud je zaregistrovaný zdroj konfigurace tajných kódů uživatele, rozhraní .NET Configuration API může tajné kódy číst. Injektáž konstruktoru se používá k získání přístupu ke konfiguračnímu rozhraní API .NET. Vezměte v úvahu následující příklady čtení Movies:ServiceApiKey klíče:

Spouštěcí třída:

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)
    {
        app.Run(async (context) =>
        {
            var result = string.IsNullOrEmpty(_moviesApiKey) ? "Null" : "Not Null";
            await context.Response.WriteAsync($"Secret is {result}");
        });
    }
}

Razor Model stránek:

public class IndexModel : PageModel
{
    private readonly IConfiguration _config;

    public IndexModel(IConfiguration config)
    {
        _config = config;
    }

    public void OnGet()
    {
        var moviesApiKey = _config["Movies:ServiceApiKey"];

        // call Movies service with the API key
    }
}

Další informace najdete v tématu Konfigurace přístupu v konfiguraci spouštění a přístupu na Razor stránce.

Mapování tajných kódů na poco

Mapování celého literálu objektu na objekt POCO (jednoduchá třída .NET s vlastnostmi) je užitečné pro agregaci souvisejících vlastností.

Předpokládejme, že soubor secrets.jsobsahuje následující dva tajné kódy:

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

Pokud chcete namapovat předchozí tajné kódy na objekt POCO, použijte funkci vazby grafu objektu rozhraní .NET Configuration API. Následující kód se váže na vlastní MovieSettings objekty POCO a přistupuje k ServiceApiKey hodnotě vlastnosti:

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

Tajné Movies:ConnectionString kódy a se Movies:ServiceApiKey mapují na příslušné vlastnosti v MovieSettings :

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

    public string ServiceApiKey { get; set; }
}

Nahrazení řetězce tajnými kódy

Ukládání hesel v prostém textu je nezabezpečené. Například připojovací řetězec databáze uložený v souboru appsettings.json může obsahovat heslo pro zadaného uživatele:

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

Bezpečnějším přístupem je uložení hesla jako tajného klíče. Například:

dotnet user-secrets set "DbPassword" "pass123"

Odeberte Password pár klíč-hodnota z připojovacího řetězce v appsettings.json . Například:

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

Hodnotu tajného klíče můžete nastavit u vlastnosti objektu a SqlConnectionStringBuilder Password dokončit tak připojovací řetězec:

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;

        // code omitted for brevity
    }

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

Zobrazení seznamu tajných kódů

Předpokládejme, že soubor secrets.jsobsahuje následující dva tajné kódy:

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

Z adresáře, ve kterém existuje soubor projektu, spusťte následující příkaz:

dotnet user-secrets list

Objeví se následující výstup:

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

V předchozím příkladu dvojtečka v názvech klíčů označuje hierarchii objektů v rámci secrets.json.

Odebrání jednoho tajného klíče

Předpokládejme, že soubor secrets.jsobsahuje následující dva tajné kódy:

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

Z adresáře, ve kterém existuje soubor projektu, spusťte následující příkaz:

dotnet user-secrets remove "Movies:ConnectionString"

Soubor secrets.json aplikace byl upraven tak, aby odebírat pár klíč-hodnota přidružený ke MoviesConnectionString klíči:

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

dotnet user-secrets list zobrazí následující zprávu:

Movies:ServiceApiKey = 12345

Odebrání všech tajných kódů

Předpokládejme, že soubor secrets.jsobsahuje následující dva tajné kódy:

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

Z adresáře, ve kterém existuje soubor projektu, spusťte následující příkaz:

dotnet user-secrets clear

Všechny tajné kódy uživatelů pro aplikaci byly ze souboru secrets.json odstraněny:

{}

Po dotnet user-secrets list spuštění se zobrazí následující zpráva:

No secrets configured for this application.

Správa tajných kódů uživatelů pomocí Visual Studio

Pokud chcete spravovat tajné kódy uživatelů Visual Studio, klikněte pravým tlačítkem na projekt v Průzkumníku řešení a vyberte Spravovat tajné kódy uživatelů:

Visual Studio se zobrazením možnosti Spravovat tajné kódy uživatelů

Další zdroje informací