Freigeben über


Nutzung von Paketen aus authentifizierten Feeds

Viele NuGet-Vorgänge, z. B. Wiederherstellen und Installieren, erfordern eine Kommunikation mit einer oder mehreren Paketquellen, die in nuget.config Dateien konfiguriert werden können.

Hinweis

Verwenden Sie Paketquellen, denen Sie vertrauen.

Bei HTTP-Feeds führt NuGet eine nicht authentifizierte Anforderung aus. Wenn der Server mit einer HTTP 401-Antwort antwortet, sucht NuGet in der folgenden Reihenfolge nach Anmeldeinformationen:

  1. Eine Umgebungsvariable NuGetPackageSourceCredentials_{name}.
  2. Zugangsdaten in nuget.config Dateien.
  3. Verwenden Sie einen NuGet-Anmeldeinformationsanbieter, wenn Ihre Paketquelle einen bereitstellt.

Die Anmeldeinformationen, die Sie verwenden müssen, werden durch die Paketquelle festgelegt. Sofern Sie keinen Anmeldeinformationsanbieter verwenden, sollten Sie mit Ihrer Paketquelle überprüfen, welche Anmeldeinformationen verwendet werden sollen. Es ist häufig, dass Paketquellen Ihnen verbieten, Ihr Passwort, das Sie für die Anmeldung auf der Website verwenden, mit NuGet zu verwenden. In der Regel müssen Sie ein persönliches Zugriffstoken erstellen, das als NuGet-Kennwort verwendet werden soll, aber Sie sollten die Dokumentation für den nuGet-Server überprüfen, den Sie verwenden. Einige Paketquellen, z. B. Azure DevOps und GitHub, verfügen über Bereichszugriffstoken, daher müssen Sie möglicherweise sicherstellen, dass alle token, die Sie erstellen, den erforderlichen Bereich enthalten.

Bewährte Methoden für die Sicherheit beim Verwalten von Anmeldeinformationen

Obwohl NuGet nach Anmeldeinformationen in der oben genannten Reihenfolge sucht, empfehlen wir die folgende Sequenz zum sicheren Verwalten von Anmeldeinformationen beim Authentifizieren mit privaten Feeds:

  1. Anmeldeinformationsanbieter: Es wird dringend empfohlen, wann immer möglich einen Anmeldeinformationsanbieter zu verwenden. Bei diesem Ansatz wird verhindert, Geheimnisse im Nur-Text-Format zu speichern, und das Risiko minimiert, dass Geheimnisse versehentlich über die Quellcodeverwaltung offengelegt werden. Darüber hinaus verringert sie im Allgemeinen die Anzahl der Orte, die Sie aktualisieren müssen, wenn die Anmeldeinformationen ablaufen oder sich ändern. Wenn der Anmeldeinformationsanbieter einmaliges Anmelden unterstützt, kann die Häufigkeit der Anmeldungen oder die Anzahl der Orte verringert werden, an denen Anmeldeinformationen gespeichert werden müssen. Weitere Informationen finden Sie im Abschnitt "Anmeldeinformationsanbieter".

  2. Verschlüsselte Anmeldeinformationen in nuget.config: Wenn kein Anmeldeinformationsanbieter verfügbar ist, sollten Sie die Verwendung verschlüsselter Anmeldeinformationen in Betracht ziehen. Dieser Ansatz bietet eine zusätzliche Sicherheitsebene, indem die Anmeldeinformationen in einem verschlüsselten Format gespeichert werden. Weitere Informationen finden Sie im Abschnitt zu Anmeldeinformationen in nuget.config Dateien.

    Hinweis

    Beachten Sie, dass verschlüsselte Kennwörter nur unter Windows unterstützt werden. Darüber hinaus können sie nur auf demselben Computer und von demselben Benutzer entschlüsselt werden, der sie ursprünglich verschlüsselt hat.

  3. Verwenden von Umgebungsvariablenmakros in nuget.config: Wenn die Verwendung verschlüsselter Anmeldeinformationen nicht möglich ist, sollten Sie die Anmeldeinformationen in der nuget.config Datei mit Umgebungsvariablenmakros speichern. Mit diesem Ansatz können Sie auf Umgebungsvariablen verweisen, die die tatsächlichen Anmeldeinformationen enthalten. Sie verbessert transparenz und hilft Endbenutzern zu verstehen, wie ihre Anmeldeinformationen konfiguriert sind. Weitere Informationen finden Sie im Abschnitt "Zugangsdaten" in den nuget.config Dateien.

  4. Verwenden von Umgebungsvariablen direkt: Als Fallbackoption können Sie die Anmeldeinformationen direkt in Umgebungsvariablen speichern. Beachten Sie jedoch, dass dieser Ansatz im Vergleich zur Verwendung von Umgebungsvariablenmakros in der nuget.config Datei möglicherweise weniger Sichtbarkeit und Kontrolle bietet. Weitere Informationen finden Sie im Abschnitt zu Anmeldeinformationen in Umgebungsvariablen.

  5. Löschen von Textanmeldeinformationen in NuGet.Config: Es wird dringend empfohlen, eine der zuvor erwähnten Optionen zu verwenden. Wenn diese Optionen nicht möglich sind, können Sie die Anmeldeinformationen in der nuget.config Datei speichern. Diese Option sollte jedoch nur in Umgebungen verwendet werden, in denen keine andere sichere Option verfügbar ist. Weitere Informationen finden Sie im Abschnitt zu Zugangsdaten in nuget.config Dateien.

    Warnung

    Das Speichern von Anmeldeinformationen im klartextigen Text in der nuget.config-Datei , insbesondere beim Speichern der Datei in der Quellcodeverwaltung, ist riskant, da die Wahrscheinlichkeit von versehentlichen Verlusten an Anmeldeinformationen erhöht wird. Wenn Sie Anmeldeinformationen in der nuget.config Datei speichern müssen, sollten Sie eine der oben genannten sichereren Optionen verwenden.

Indem Sie diese bewährten Methoden einhalten, können Sie private Feeds sicher authentifizieren und gleichzeitig das Risiko vertraulicher Informationen minimieren.

Anmeldeinformationen in Umgebungsvariablen

NuGet sucht nach einer Umgebungsvariable namens NuGetPackageSourceCredentials_{name}, wobei {name} der Wert von key="name" in der Paketquelle Ihrer nuget.config Datei ist. Der Wert der Umgebungsvariable muss Username={username};Password={password} sein und kann optional ;ValidAuthenticationTypes={types} enthalten. Wenn die Umgebungsvariable nicht mit der NuGet-Konvention übereinstimmt oder der Wert das erwartete Muster von NuGet nicht erfüllt, ignoriert NuGet die Umgebungsvariable im Hintergrund und sucht weiterhin nach Anmeldeinformationen für die Paketquelle an anderer Stelle. Es gibt keine Protokolle, um zu signalisieren, dass NuGet die Anmeldeinformationen aus der Umgebungsvariable verwendet. Dies kann zu Problemen beim Debuggen von Authentifizierungsproblemen führen, wenn die Umgebungsvariable einen abgelaufenen geheimen Schlüssel enthält, und der neue geheime Schlüssel wird einer nuget.config Datei hinzugefügt, da die Konfigurationsdatei niedrigeren Rang hat.

Tipp

Die Verwendung von Umgebungsvariablen in CI/CD-Pipelines ist eine ausgezeichnete Wahl, um das Risiko zu minimieren, dass geheime Schlüssel in Protokollen erfasst werden.

Betrachten Sie beispielsweise die folgende nuget.config Datei:

<configuration>
  <packageSources>
    <clear />
    <add key="Contoso" value="https://nuget.contoso.com/v3/index.json" />
  </packageSources>
</configuration>

In diesem Fall lautet Contoso der Quellname und NuGet sucht nach dem Namen der Umgebungsvariablen NuGetPackageSourceCredentials_Contoso. Einige Plattformen sind case-sensitiv, daher achten Sie darauf, die richtige Groß- und Kleinschreibung für den Umgebungsnamen und den Quelldateinamen zu verwenden, wie in der nuget.config Datei definiert.

Wenn der Benutzername nugetUser und das Kennwort secret123 ist, sollte der Wert der Umgebungsvariablen auf Username=nugetUser;Password=secret123 gesetzt werden. Wenn NuGet diese Anmeldeinformationen nur für die HTTP-Standardauthentifizierung, aber nicht für andere Authentifizierungsschemas verwenden soll, können Sie den Wert der Umgebungsvariable auf Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basicfestlegen. Weitere Informationen zu gültigen Authentifizierungstypen finden Sie in den Dokumenten zu Paketanmeldeinformationen in nuget.config Dateien.

Hinweis

Umgebungsvariablen haben Einschränkungen für zulässige Zeichen, und unterschiedliche Betriebssysteme können unterschiedliche Einschränkungen aufweisen. Leerzeichen sind z. B. nicht zulässig. Daher verwenden Sie dieses Umgebungsvariablenfeature, um NuGet-Anmeldeinformationen für Paketquellen anzugeben, die alle Zeichen verwenden, die für die Umgebungsvariablen Ihrer Plattform ungültig sind. In solchen Fällen sollten Sie die Paketquelle in Ihrer nuget.config-Datei umbenennen.

Anmeldeinformationen in nuget.config Dateien

nuget.config Dateien können Paketquellanmeldeinformationen enthalten. Weitere Informationen, einschließlich Syntax, finden Sie im Abschnitt nuget.config Dateireferenzdokumentation zu Paketquellanmeldeinformationen . Die Verwendung dotnet nuget update source in der Befehlszeile ist jedoch einfacher, um die Anmeldeinformationen festzulegen.

Warnung

Achten Sie beim Festlegen von Anmeldeinformationen in nuget.config Dateien, insbesondere beim Speichern der Anmeldeinformationen als Nur-Text. Wenn die Anmeldeinformationen in eine nuget.config Datei geschrieben werden, die sich in der Quellcodeverwaltung befindet, besteht ein erhöhtes Risiko, dass das Geheimnis versehentlich verloren geht.

Da NuGet Einstellungen aus mehreren Dateien ansammelt, wird empfohlen, Anmeldeinformationen für Ihren Benutzer nuget.config Datei zu speichern. Außerdem empfehlen wir, Paketquellen in der Lösung (Quellcode-Repository) nuget.config-Datei zu speichern, einschließlich eines <clear />-Elements, um die Build-Zuverlässigkeit zu gewährleisten.

Der Benutzername und das Klartext-Passwort in einer nuget.config Datei können eine Umgebungsvariable verwenden, indem Sie den Umgebungsvariablennamen, den Sie verwenden möchten, mit % am Anfang und Ende versehen. Weitere Informationen finden Sie in den nuget.config Referenzdokumenten zur Verwendung von Umgebungsvariablen.

Authentifizierungsanbieter

NuGet verfügt über ein Erweiterbarkeitsmodell, sodass Plug-Ins NuGet-Anmeldeinformationen bereitstellen können. Der Pfad, auf dem Credential Provider installiert werden müssen, damit NuGet sie erkennen kann, unterscheidet sich für .NET Framework (NuGet.exe, MSBuild und Visual Studio) und das .NET SDK, das auf der .NET 5+ Laufzeit ausgeführt wird.

NuGet hat ein Konzept, im interaktiven Modus oder nicht interaktiven Modus ausgeführt zu werden. Wenn im nicht interaktiven Modus, werden Anmeldeanbieter gebeten, NuGet nicht zu blockieren. Im interaktiven Modus werden Sie möglicherweise vom Authentifizierungsanbieter aufgefordert, sich anzumelden. Verschiedene Tools weisen unterschiedliche Standardwerte auf, daher muss der interaktive Modus je nach Szenario möglicherweise opt-in oder opt-out sein.

Werkzeug Standard Umschalten
dotnet-CLI Nicht interaktiv --interactive Argument. Beispiel: dotnet restore --interactive.
MSBuild Nicht interaktiv NuGetInteractive MSBuild-Eigenschaft. Beispiel: msbuild -t:restore -p:NuGetInteractive=true.
NuGet.exe Interaktiv -NonInteractive Argument. Beispiel: nuget.exe restore -NonInteractive.
Visual Studio Interaktiv nicht im nicht-interaktiven Modus ausführbar.

NuGet.exe unterstützt sowohl V1- als auch V2-Anmeldeinformationsanbieter, während MSBuild und .NET SDK nur die plattformübergreifenden Plug-Ins (V2) unterstützen.

In Visual Studio verfügt NuGet über eine Visual Studio Credential Provider-Schnittstelle, die Anmeldeinformationsanbieter verwenden können, um eine grafische Anmeldeoberfläche bereitzustellen, oder visual Studio-APIs bei Bedarf aufrufen. NuGet in Visual Studio greift auf die Anmeldeinformationsanbieter der Befehlszeile zurück, wenn kein Visual Studio-Anmeldeinformationsanbieter vorhanden ist, der die Quelle verarbeitet.

Visual Studio 2017, Version 15.9 und höher, enthält einen Anmeldeinformationsanbieter für Azure Artifacts, der in Visual Studio, MSBuild und NuGet.exefunktioniert. Der Anmeldeinformationsanbieter für das .NET SDK ist jedoch nicht von Visual Studio enthalten. Daher muss separat installiert werden , um mit der dotnet CLI zu arbeiten.

Liste der Anmeldeinformationsanbieter

Hier ist eine Liste der Anbieter von Anmeldeinformationen, die wir kennen: