Bezpečné ukládání tajných kódů aplikací během vývoje
Spropitné
Tento obsah je výňatek z eBooku, architektury mikroslužeb .NET pro kontejnerizované aplikace .NET, které jsou k dispozici na .NET Docs nebo jako zdarma ke stažení PDF, které lze číst offline.
Pokud se chcete připojit s chráněnými prostředky a dalšími službami, musí aplikace ASP.NET Core obvykle používat připojovací řetězce, hesla nebo jiné přihlašovací údaje, které obsahují citlivé informace. Tyto citlivé informace se nazývají tajné kódy. Osvědčeným postupem je nezahrnovat tajné kódy do zdrojového kódu a zajistit, aby se tajné kódy neukládaly do správy zdrojového kódu. Místo toho byste měli ke čtení tajných kódů z bezpečnějších umístění použít konfigurační model ASP.NET Core.
Tajné kódy pro přístup k prostředkům pro vývoj a přípravu musíte oddělit od tajných kódů používaných pro přístup k produkčním prostředkům, protože různí jednotlivci budou potřebovat přístup k těmto různým sadám tajných kódů. Při ukládání tajných kódů používaných při vývoji jsou běžné přístupy k ukládání tajných kódů do proměnných prostředí nebo pomocí nástroje ASP.NET Core Secret Manager. Pro bezpečnější úložiště v produkčních prostředích můžou mikroslužby ukládat tajné kódy ve službě Azure Key Vault.
Ukládání tajných kódů do proměnných prostředí
Jedním ze způsobů, jak zabránit tomu, aby tajné údaje byly ve zdrojovém kódu, je pro vývojáře nastavit tajné údaje ve formě řetězců jako proměnné prostředí na vývojových počítačích. Pokud používáte proměnné prostředí k ukládání tajných kódů s hierarchickými názvy, jako jsou ty vnořené v oddílech konfigurace, musíte proměnné pojmenovat, aby zahrnovaly úplnou hierarchii jejích oddílů oddělených dvojtečkami (:).
Například nastavení proměnné prostředí Logging:LogLevel:Default
na hodnotu Debug
by odpovídalo konfigurační hodnotě z následujícího souboru JSON:
{
"Logging": {
"LogLevel": {
"Default": "Debug"
}
}
}
Pro přístup k těmto hodnotám z proměnných prostředí stačí, aby aplikace při vytváření objektu IConfigurationRoot
volala AddEnvironmentVariables
na ConfigurationBuilder
.
Poznámka
Proměnné prostředí se obvykle ukládají jako prostý text, takže pokud dojde k ohrožení počítače nebo procesu s proměnnými prostředí, budou hodnoty proměnných prostředí viditelné.
Ukládání tajných kódů pomocí nástroje ASP.NET Core Secret Manager
Nástroj ASP.NET Core Secret Manager poskytuje další metodu, jak uchovávat tajné kódy mimo zdrojového kódu během vývojového. Pokud chcete použít nástroj Secret Manager, nainstalujte balíček Microsoft.Extensions.Configuration.UserSecrets do souboru projektu. Jakmile je závislost přítomna a je obnovena, lze příkaz dotnet user-secrets
použít k nastavení hodnoty tajemství z příkazového řádku. Tyto tajné kódy se uloží do souboru JSON v adresáři profilu uživatele (podrobnosti se liší podle operačního systému) od zdrojového kódu.
Tajné kódy nastavené nástrojem Secret Manager jsou uspořádány podle vlastnosti UserSecretsId
projektu, který používá tajné kódy. Proto je nutné nastavit vlastnost UserSecretsId v souboru projektu, jak je znázorněno v následujícím fragmentu kódu. Výchozí hodnota je GUID přiřazený Visual Studio, ale samotný řetězec není důležitý, pokud je na vašem počítači jedinečný.
<PropertyGroup>
<UserSecretsId>UniqueIdentifyingString</UserSecretsId>
</PropertyGroup>
Použití tajných kódů uložených ve Správci tajných kódů v aplikaci se provádí voláním AddUserSecrets<T>
na instanci ConfigurationBuilder
, která do konfigurace zahrne tajné kódy pro aplikaci. Obecný parametr T
by měl být typ ze sestavení, na které byl použit UserSecretId. Použití AddUserSecrets<Startup>
je obvykle v pořádku.
AddUserSecrets<Startup>()
je součástí výchozích možností vývojového prostředí při použití metody CreateDefaultBuilder
v Program.cs.