Dela via


Lagra programhemligheter på ett säkert sätt under utvecklingen

Dricks

Det här innehållet är ett utdrag från eBook, .NET Microservices Architecture for Containerized .NET Applications, tillgängligt på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

För att ansluta till skyddade resurser och andra tjänster behöver ASP.NET Core-program vanligtvis använda anslutningssträng, lösenord eller andra autentiseringsuppgifter som innehåller känslig information. Dessa känsliga uppgifter kallas hemligheter. Det är bästa praxis att inte inkludera hemligheter i källkoden och se till att inte lagra hemligheter i källkontrollen. I stället bör du använda konfigurationsmodellen ASP.NET Core för att läsa hemligheterna från säkrare platser.

Du måste separera hemligheterna för åtkomst till utvecklings- och mellanlagringsresurser från de som används för åtkomst till produktionsresurser, eftersom olika personer behöver åtkomst till dessa olika uppsättningar hemligheter. För att lagra hemligheter som används under utvecklingen är vanliga metoder att antingen lagra hemligheter i miljövariabler eller genom att använda verktyget ASP.NET Core Secret Manager. För säkrare lagring i produktionsmiljöer kan mikrotjänster lagra hemligheter i ett Azure Key Vault.

Lagra hemligheter i miljövariabler

Ett sätt att hålla hemligheter borta från källkoden är att utvecklare anger strängbaserade hemligheter som miljövariabler på sina utvecklingsdatorer. När du använder miljövariabler för att lagra hemligheter med hierarkiska namn, till exempel de som är kapslade i konfigurationsavsnitt, måste du namnge variablerna för att inkludera hela hierarkin för dess avsnitt, avgränsade med kolon (:).

Till exempel skulle inställningen av en miljövariabel Logging:LogLevel:Default till Debug värde motsvara ett konfigurationsvärde från följande JSON-fil:

{
    "Logging": {
        "LogLevel": {
            "Default": "Debug"
        }
    }
}

För att få åtkomst till dessa värden från miljövariabler behöver programmet bara anropa AddEnvironmentVariables dess ConfigurationBuilder när ett IConfigurationRoot objekt skapas.

Kommentar

Miljövariabler lagras ofta som oformaterad text, så om datorn eller processen med miljövariablerna komprometteras visas miljövariabelvärdena.

Lagra hemligheter med ASP.NET Core Secret Manager

Verktyget ASP.NET Core Secret Manager innehåller en annan metod för att hålla hemligheter borta från källkoden under utvecklingen. Om du vill använda verktyget Secret Manager installerar du paketet Microsoft.Extensions.Configuration.SecretManager i projektfilen. När beroendet finns och har återställts dotnet user-secrets kan kommandot användas för att ange värdet för hemligheter från kommandoraden. Dessa hemligheter lagras i en JSON-fil i användarens profilkatalog (information varierar beroende på operativsystem), bort från källkoden.

Hemligheter som anges av secret manager-verktyget organiseras av UserSecretsId egenskapen för projektet som använder hemligheterna. Därför måste du vara noga med att ange egenskapen UserSecretsId i projektfilen, som du ser i kodfragmentet nedan. Standardvärdet är ett GUID som tilldelats av Visual Studio, men den faktiska strängen är inte viktig så länge den är unik på datorn.

<PropertyGroup>
    <UserSecretsId>UniqueIdentifyingString</UserSecretsId>
</PropertyGroup>

Att använda hemligheter som lagras med Secret Manager i ett program utförs genom att anropa AddUserSecrets<T> instansen ConfigurationBuilder för att inkludera hemligheter för programmet i konfigurationen. Den generiska parametern T ska vara en typ från sammansättningen som UserSecretId tillämpades på. Vanligtvis är det bra att använda AddUserSecrets<Startup> .

AddUserSecrets<Startup>() ingår i standardalternativen för utvecklingsmiljön när du använder CreateDefaultBuilder metoden i Program.cs.