Freigeben über


Sicheres Speichern von Anwendungsgeheimnissen während der Entwicklung

Tipp

Dieser Inhalt ist ein Auszug aus dem eBook .NET Microservices Architecture for Containerized .NET Applications, verfügbar auf .NET Docs oder als kostenlose herunterladbare PDF, die offline gelesen werden kann.

.NET Microservices-Architektur für containerisierte .NET-Anwendungen eBook-Cover-Thumbnail.

Um eine Verbindung mit geschützten Ressourcen und anderen Diensten herzustellen, müssen ASP.NET Core-Anwendungen in der Regel Verbindungszeichenfolgen, Kennwörter oder andere Anmeldeinformationen verwenden, die vertrauliche Informationen enthalten. Diese vertraulichen Informationen werden als geheime Schlüssel bezeichnet. Es empfiehlt sich, geheime Schlüssel nicht im Quellcode einzuschließen und sicherzustellen, dass geheime Schlüssel nicht in der Quellcodeverwaltung gespeichert werden. Stattdessen sollten Sie das ASP.NET Core-Konfigurationsmodell verwenden, um die geheimen Schlüssel von sichereren Speicherorten zu lesen.

Sie müssen die geheimen Schlüssel für den Zugriff auf Entwicklungs- und Stagingressourcen von den Schlüsseln trennen, die für den Zugriff auf Produktionsressourcen verwendet werden, da verschiedene Personen Zugriff auf diese verschiedenen Gruppen geheimer Schlüssel benötigen. Um geheime Schlüssel zu speichern, die während der Entwicklung verwendet werden, sind allgemeine Ansätze entweder das Speichern geheimer Schlüssel in Umgebungsvariablen oder mithilfe des Tools ASP.NET Core Secret Manager. Für eine sicherere Speicherung in Produktionsumgebungen können Microservices geheime Schlüssel in einem Azure Key Vault speichern.

Speichern geheimer Schlüssel in Umgebungsvariablen

Eine Möglichkeit, geheime Schlüssel außerhalb des Quellcodes zu behalten, besteht darin, dass Entwickler Zeichenfolgenbasierte geheime Schlüssel als Umgebungsvariablen auf ihren Entwicklungscomputern festlegen. Wenn Sie Umgebungsvariablen verwenden, um geheime Schlüssel mit hierarchischen Namen zu speichern, z. B. die in Konfigurationsabschnitten geschachtelten, müssen Sie die Variablen benennen, um die vollständige Hierarchie der Abschnitte einzuschließen, die durch Doppelpunkte (:)) getrennt sind.

Das Festlegen einer Umgebungsvariable Logging:LogLevel:Default auf Debug einen Wert würde z. B. einem Konfigurationswert aus der folgenden JSON-Datei entsprechen:

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

Um auf diese Werte aus den Umgebungsvariablen zuzugreifen, muss die Anwendung AddEnvironmentVariables auf ihrem ConfigurationBuilder aufrufen, während sie ein IConfigurationRoot Objekt erstellt.

Hinweis

Umgebungsvariablen werden häufig als Nur-Text gespeichert. Wenn also der Computer oder der Prozess mit den Umgebungsvariablen kompromittiert wird, werden die Umgebungsvariablenwerte angezeigt.

Speichern geheimer Schlüssel mit dem ASP.NET Core Secret Manager

Das tool ASP.NET Core Secret Manager bietet eine weitere Methode, geheime Schlüssel während der Entwicklung außerhalb des Quellcodes zu bewahren. Um das Tool "Geheimer Manager" zu verwenden, installieren Sie das Paket "Microsoft.Extensions.Configuration.UserSecrets" in Ihrer Projektdatei. Sobald diese Abhängigkeit vorhanden ist und wiederhergestellt wurde, kann der dotnet user-secrets Befehl verwendet werden, um den Wert geheimer Schlüssel über die Befehlszeile festzulegen. Diese geheimen Schlüssel werden in einer JSON-Datei im Profilverzeichnis des Benutzers gespeichert (Details variieren je nach Betriebssystem), und zwar nicht im Quellcode.

Geheime Schlüssel, die vom Tool "Geheimer Manager" festgelegt werden, werden anhand der UserSecretsId Eigenschaft des Projekts organisiert, das die geheimen Schlüssel verwendet. Daher müssen Sie unbedingt die UserSecretsId-Eigenschaft in Ihrer Projektdatei festlegen, wie im folgenden Codeausschnitt dargestellt. Der Standardwert ist eine GUID, die von Visual Studio zugewiesen wird, die tatsächliche Zeichenfolge ist jedoch nicht wichtig, solange sie auf Ihrem Computer eindeutig ist.

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

Die Verwendung von Geheimnissen, die mit Secret Manager in einer Anwendung gespeichert sind, erfolgt dadurch, dass die AddUserSecrets<T>-Methode auf der ConfigurationBuilder-Instanz aufgerufen wird, um die Geheimnisse in die Konfiguration der Anwendung einzubinden. Der generische Parameter T sollte ein Typ aus der Assembly sein, auf die die UserSecretId angewendet wurde. In der Regel ist die Verwendung AddUserSecrets<Startup> in Ordnung.

Dies AddUserSecrets<Startup>() ist in den Standardoptionen für die Entwicklungsumgebung enthalten, wenn sie die CreateDefaultBuilder Methode in Program.cs verwenden.