Authentifiziersfeeds mit nuget.exe-Anmeldeinformationsanbietern

In Version 3.3 wurde Unterstützung für nuget.exe-spezifische (v1) Anmeldeinformationsanbieter hinzugefügt. Danach wurde in Version 4.8 Unterstützung für Anmeldeinformationsanbieter (v2) hinzugefügt, die über alle Befehlszeilenszenarien (nuget.exe, dotnet.exe, msbuild.exe) hinweg funktionieren.

Weitere Informationen zu allen Authentifizierungsansätzen finden Sie unter Nutzen von Paketen aus authentifizierten Feeds.

Ermittlung des nuget.exe-Anmeldeinformationsanbieters

nuget.exe-Anmeldeinformationsanbieter können auf 3 Arten verwendet werden:

  • Global: Um einen Anmeldeinformationsanbieter für alle Instanzen von nuget.exe bereitzustellen, die unter dem Profil des aktuellen Benutzers ausgeführt werden, fügen Sie ihn %LocalAppData%\NuGet\CredentialProviders hinzu. Möglicherweise müssen Sie den Ordner CredentialProviders erstellen. Anmeldeinformationsanbieter können im Stammverzeichnis des Ordners CredentialProviders oder innerhalb eines Unterordners installiert werden. Wenn ein Anmeldeinformationsanbieter über mehrere Dateien/Assemblys verfügt, können Sie Unterordner verwenden, um die Anbieter zu organisieren.

  • Von einer Umgebungsvariable: Anmeldeinformationsanbieter können an einem beliebigen Speicherort gespeichert und für nuget.exe zugänglich gemacht werden, indem Sie die Umgebungsvariable %NUGET_CREDENTIALPROVIDERS_PATH% auf den Speicherort des Anbieters festlegen. Bei dieser Variablen kann es sich um eine durch Semikolons getrennte Liste (z. B. path1;path2) handeln, wenn mehrere Standorte vorhanden sind.

  • Zusammen mit „nuget.exe“: nuget.exe"-Anmeldeinformationsanbieter können im gleichen Ordner wie nuget.exe gespeichert werden.

Beim Laden von Anmeldeinformationsanbietern durchsucht nuget.exe die oben aufgeführten Speicherorte nacheinander nach Dateien mit dem Namen credentialprovider*.exe und lädt diese Dateien dann in der Reihenfolge, in der sie gefunden wurden. Wenn sich mehrere Anmeldeinformationsanbieter im selben Ordner befinden, werden sie in alphabetischer Reihenfolge geladen.

Erstellen eines nuget.exe-Anmeldeinformationsanbieters

Ein Anmeldeinformationsanbieter ist eine ausführbare Befehlszeilendatei mit einem Namen im Format CredentialProvider*.exe, die Eingaben erfasst, Anmeldeinformationen nach Bedarf abruft und dann den entsprechenden Beendigungsstatuscode und die Standardausgabe zurückgibt.

Als Anbieter müssen Sie wie folgt vorgehen:

  • Ermitteln Sie, ob Sie Anmeldeinformationen für den Ziel-URI vor dem Initiieren des Abrufs der der Anmeldeinformationen bereitstellen können. Wenn dies nicht der Fall ist, sollte der Statuscode 1 ohne Anmeldeinformationen zurückgegeben werden.
  • Ändern Sie NuGet.Config nicht (legen Sie dort z. B. keine Anmeldeinformationen fest).
  • Verwalten Sie die HTTP-Proxykonfiguration eigenständig, da NuGet keine Proxyinformationen für das Plug-In bereitstellt.
  • Geben Sie Anmeldeinformationen oder Fehlerdetails an nuget.exe zurück, indem Sie ein JSON-Antwortobjekt (siehe unten) mit UTF-8-Codierung in stdout schreiben.
  • Geben Sie optional zusätzliche Ablaufverfolgungsprotokollierung an stderr aus. Geheimnisse sollten niemals in stderr geschrieben werden, da mit den Ausführlichkeitsstufen „normal“ oder „detailed“ (ausführlich) solche Ablaufverfolgungen von NuGet in der Konsole angezeigt werden.
  • Unerwartete Parameter sollten ignoriert werden. Sie sorgen für Aufwärtskompatibilität mit zukünftigen Versionen von NuGet.

Eingabeparameter

Parameter/Switch Beschreibung
Uri {Wert} Der Paketquellen-URI, der Anmeldeinformationen erfordert.
NonInteractive Falls vorhanden, gibt der Anbieter keine interaktiven Eingabeaufforderungen aus.
IsRetry Gibt (wenn vorhanden) an, dass dieser Versuch ein Wiederholungsversuch eines zuvor fehlgeschlagenen Versuchs ist. Anbieter verwenden dieses Flag in der Regel, um sicherzustellen, dass alle vorhandenen Caches umgangen werden und nach Möglichkeit neue Anmeldeinformationen angefordert werden.
Verbosity {Wert} Einer der folgenden Werte (wenn vorhanden): „normal“, „quiet“ oder „detailed“. Wenn kein Wert angegeben wird, wird standardmäßig „normal“ verwendet. Anbieter sollten dies als Anzeichen für die Stufe der optionalen Protokollierung verwenden, die an den Standardfehlerstream ausgegeben werden soll.

Exitcodes

Code Ergebnis Beschreibung
0 Erfolgreich Die Anmeldeinformationen wurden erfolgreich abgerufen und in stdout geschrieben.
1 ProviderNotApplicable Der aktuelle Anbieter stellt keine Anmeldeinformationen für den angegebenen URI bereit.
2 Fehler Der Anbieter ist der richtige Anbieter für den angegebenen URI, kann aber keine Anmeldeinformationen bereitstellen. In diesem Fall versucht „nuget.exe“ die Authentifizierung nicht erneut, und es tritt ein Fehler auf. Ein typisches Beispiel dafür ist, wenn ein Benutzer eine interaktive Anmeldung abbricht.

Standardausgabe

Eigenschaft Hinweise
Benutzername Benutzername für authentifizierte Anforderungen.
Kennwort Kennwort für authentifizierte Anforderungen.
`Message` Optionale Details zur Antwort, die nur verwendet werden, um zusätzliche Details in Fehlerfällen anzuzeigen.

stdout (Beispiel):

{ "Username" : "freddy@example.com",
    "Password" : "bwm3bcx6txhprzmxhl2x63mdsul6grctazoomtdb6kfbof7m3a3z",
    "Message"  : "" }

Problembehandlung bei einem Anmeldeinformationsanbieter

Derzeit bietet NuGet keine direkte Unterstützung für das Debuggen von benutzerdefinierten Anmeldeinformationsanbietern. Issue 4598 verfolgt dies nach.

Sie können auch folgende Aktionen ausführen:

  • Führen Sie „nuget.exe“ mit dem Schalter -verbosity aus, um die ausführliche Ausgabe zu untersuchen.

  • Fügen Sie stdout an geeigneten Stellen Debugmeldungen hinzu.

  • Stellen Sie sicher, dass Sie „nuget.exe“ 3.3 oder höher verwenden.

  • Fügen Sie den Debugger beim Start mit diesem Codeausschnitt an:

    while (!Debugger.IsAttached)
    {
        System.Threading.Thread.Sleep(100);
    }
    Debugger.Break();