Toepassingsgeheimen veilig opslaan tijdens de ontwikkeling

Aanbeveling

Deze inhoud is een fragment uit het eBook, .NET Microservices Architecture for Containerized .NET Applications, beschikbaar op .NET Docs of als een gratis downloadbare PDF die offline kan worden gelezen.

PDF- downloaden

.NET Microservices Architectuur voor Gecontaineriseerde .NET Toepassingen eBook omslagthumbnail.

Als u verbinding wilt maken met beveiligde resources en andere services, moeten ASP.NET Core-toepassingen doorgaans verbindingsreeksen, wachtwoorden of andere referenties gebruiken die gevoelige informatie bevatten. Deze gevoelige gegevens worden geheimengenoemd. Het is een best practice om geheimen niet op te nemen in broncode en ervoor te zorgen dat u geen geheimen opslaat in broncodebeheer. In plaats daarvan moet u het ASP.NET Core-configuratiemodel gebruiken om de geheimen van veiligere locaties te lezen.

U moet de geheimen scheiden voor toegang tot ontwikkelings- en faseringsresources van de resources die worden gebruikt voor toegang tot productieresources, omdat verschillende personen toegang nodig hebben tot die verschillende sets geheimen. Voor het opslaan van geheimen die tijdens de ontwikkeling worden gebruikt, zijn algemene benaderingen het opslaan van geheimen in omgevingsvariabelen of met behulp van het hulpprogramma ASP.NET Core Secret Manager. Voor veiligere opslag in productieomgevingen kunnen microservices geheimen opslaan in een Azure Key Vault.

Geheimen opslaan in omgevingsvariabelen

Een manier om geheimen buiten de broncode te houden, is dat ontwikkelaars geheimen op basis van tekenreeksen kunnen instellen als omgevingsvariabelen op hun ontwikkelcomputers. Wanneer u omgevingsvariabelen gebruikt om geheimen op te slaan met hiërarchische namen, zoals de variabelen die zijn genest in configuratiesecties, moet u de variabelen een naam geven om de volledige hiërarchie van de secties op te nemen, gescheiden door dubbele punten (:).

Het instellen van een omgevingsvariabele Logging:LogLevel:Default bijvoorbeeld op Debug waarde zou gelijk zijn aan een configuratiewaarde uit het volgende JSON-bestand:

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

Voor toegang tot deze waarden vanuit omgevingsvariabelen hoeft de toepassing alleen AddEnvironmentVariables aan te roepen op de ConfigurationBuilder bij het maken van een IConfigurationRoot object.

Notitie

Omgevingsvariabelen worden meestal opgeslagen als tekst zonder opmaak, dus als de machine of het proces met de omgevingsvariabelen is aangetast, zijn de waarden van de omgevingsvariabelen zichtbaar.

Geheimen opslaan met de ASP.NET Core Secret Manager

Het hulpprogramma ASP.NET Core Secret Manager biedt een andere methode om geheimen buiten de broncode te houden tijdens het ontwikkelen. Als u het hulpprogramma Secret Manager wilt gebruiken, installeert u het pakket Microsoft.Extensions.Configuration.UserSecrets in uw projectbestand. Zodra deze afhankelijkheid aanwezig is en is hersteld, kan de opdracht dotnet user-secrets worden gebruikt om de waarde van geheime gegevens via de opdrachtregel in te stellen. Deze geheimen worden opgeslagen in een JSON-bestand in de profielmap van de gebruiker (details variëren per besturingssysteem), niet van de broncode.

Geheimen die zijn ingesteld door het hulpprogramma Secret Manager, worden georganiseerd door de eigenschap UserSecretsId van het project dat de geheimen gebruikt. Daarom moet u ervoor zorgen dat u de eigenschap UserSecretsId instelt in uw projectbestand, zoals wordt weergegeven in het onderstaande fragment. De standaardwaarde is een GUID die is toegewezen door Visual Studio, maar de werkelijke tekenreeks is niet belangrijk zolang deze uniek is op uw computer.

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

Het gebruik van geheimen die zijn opgeslagen met Secret Manager in een toepassing, wordt bereikt door AddUserSecrets<T> aan te roepen op het ConfigurationBuilder exemplaar om geheimen voor de toepassing in de configuratie op te nemen. De algemene parameter T moet een type zijn van de assembly waarop de UserSecretId is toegepast. Meestal is het gebruik van AddUserSecrets<Startup> prima.

De AddUserSecrets<Startup>() is opgenomen in de standaardopties voor de ontwikkelomgeving wanneer u de methode CreateDefaultBuilder in Program.csgebruikt.