Lagra programhemligheter på ett säkert sätt under utvecklingen
Tips
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.
För att ansluta till skyddade resurser och andra tjänster behöver ASP.NET Core-program vanligtvis använda anslutningssträngar, 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ällkod ä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 (:).
Om du till exempel anger en miljövariabel Logging:LogLevel:Default
till Debug
värde skulle det motsvara ett konfigurationsvärde från följande JSON-fil:
{
"Logging": {
"LogLevel": {
"Default": "Debug"
}
}
}
För att komma åt dessa värden från miljövariabler behöver programmet bara anropa AddEnvironmentVariables
på sina ConfigurationBuilder
när ett IConfigurationRoot
objekt skapas.
Not
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 utveckling. Om du vill använda verktyget Secret Manager installerar du paketet Microsoft.Extensions.Configuration.UserSecrets i projektfilen. När beroendet finns och har återställts kan kommandot dotnet user-secrets
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 egenskapen UserSecretsId
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>
på den ConfigurationBuilder
instansen för att inkludera hemligheter för programmet i dess konfiguration. 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 metoden CreateDefaultBuilder
i Program.cs.