Delen via


Toepassingsgeheimen veilig opslaan tijdens de ontwikkeling

Tip

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.

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

Als u verbinding wilt maken met beveiligde resources en andere services, moeten ASP.NET Core-toepassingen doorgaans gebruikmaken van verbindingsreeks s, wachtwoorden of andere referenties die gevoelige informatie bevatten. Deze gevoelige stukjes informatie worden geheimen genoemd. 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 op Debug waarde zou bijvoorbeeld 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 maar aan ConfigurationBuilder te roepen AddEnvironmentVariables 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 de ontwikkeling. Als u het hulpprogramma Secret Manager wilt gebruiken, installeert u het pakket Microsoft.Extensions.Configuration.SecretManager in uw projectbestand. Zodra deze afhankelijkheid aanwezig is en is hersteld, kan de dotnet user-secrets opdracht worden gebruikt om de waarde van geheimen van 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 UserSecretsId eigenschap 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 uitgevoerd door het ConfigurationBuilder exemplaar aan te roepen AddUserSecrets<T> 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. Normaal gesproken is het AddUserSecrets<Startup> gebruik prima.

Deze AddUserSecrets<Startup>() is opgenomen in de standaardopties voor de ontwikkelomgeving wanneer u de CreateDefaultBuilder methode in Program.cs gebruikt.