Plattformübergreifendes Authentifizierungs-Plug-In für NuGet

Ab Version 4.8 können alle NuGet-Clients (NuGet.exe, Visual Studio, dotnet.exe und MSBuild.exe) ein Authentifizierungs-Plugin verwenden, das auf dem NuGet-Modell für plattformübergreifende Plugins aufbaut.

Authentifizierung in dotnet.exe

Visual Studio und NuGet.exe sind standardmäßig interaktiv. NuGet.exe enthält einen Erstwert, um es nicht interaktiv zu machen. Zusätzlich fordern die Plug-Ins NuGet.exe und Visual Studio den Benutzer zur Eingabe auf. In dotnet.exe gibt es keine Eingabeaufforderung und der Standardwert ist nicht interaktiv.

Der Authentifizierungsmechanismus in dotnet.exe ist der Gerätefluss. Wenn die Operation zum Wiederherstellen oder Hinzufügen von Paketen interaktiv ausgeführt wird, werden die Vorgangsblöcke und Anweisungen für den Benutzer, wie die Authentifizierungen abzuschließen sind, in der Befehlszeile bereitgestellt. Wenn der Benutzer die Authentifizierung abgeschlossen hat, wird der Vorgang fortgesetzt.

Um den Vorgang interaktiv zu gestalten, sollten Sie --interactive weitergeben. Derzeit unterstützen nur die expliziten dotnet restore- und dotnet add package-Befehle ein interaktives Switching. Es gibt keinen interaktiven Schalter auf dotnet build oder dotnet publish.

Authentifizierung in MSBuild

Ähnlich wie dotnet.exe ist MSBuild.exe standardmäßig nicht interaktiv. Der Authentifizierungsmechanismus von MSBuild.exe ist der Gerätefluss. Um zuzulassen, dass die Wiederherstellung angehalten wird und auf die Authentifizierung wartet, lösen Sie mit msbuild -t:restore -p:NuGetInteractive="true" die Wiederherstellung aus.

Erstellen eines plattformübergreifenden Authentifizierungs-Plug-ins

Eine Beispielimplementierung finden Sie im Microsoft Anmeldeinformationsanbieter-Plug-in.

Es ist sehr wichtig, dass die Plug-ins den Sicherheitsanforderungen entsprechen, die von den NuGet-Clienttools festgelegt werden. Die mindestens erforderliche Version für ein Plug-in als Authentifizierungs-Plug-in ist 2.0.0. NuGet führt den Handshake mit dem Plugin durch und fragt nach den unterstützten Vorgangsansprüchen. Weitere Einzelheiten zu den spezifischen Meldungen finden Sie in den NuGet plattformübergreifenden Plugin-Protokollmeldungen.

NuGet legt die Protokollebene fest und stellt ggf. Proxyinformationen für das Plug-In bereit. Die Protokollierung an der NuGet-Konsole ist nur akzeptabel, nachdem NuGet die Protokollebene auf das Plug-in festgelegt hat.

  • .NET Framework-Plug-in-Authentifizierungsverhalten

In .NET Framework dürfen die Plug-ins einen Benutzer zur Eingabe in Form eines Dialogfelds auffordern.

  • .NET Core-Plug-in-Authentifizierungsverhalten

In .NET Core kann kein Dialogfeld angezeigt werden. Die Plug-ins sollten den Gerätefluss zur Authentifizierung verwenden. Das Plug-in kann Protokollnachrichten an NuGet mit Anweisungen an den Benutzer senden. Beachten Sie, dass die Protokollierung erst verfügbar ist, nachdem die Protokollebene auf das Plug-in festgelegt wurde. NuGet verwendet keine interaktiven Eingaben über die Befehlszeile.

Wenn der Client das Plug-in mit einem Get Authentication Credentials aufruft, müssen die Plug-ins dem Interaktivitäts-Erstwert entsprechen und das Dialog-Switching respektieren.

In der folgenden Tabelle wird das Verhalten des Plug-ins für all seinen möglichen Kombinationen zusammengefasst.

IsNonInteractive CanShowDialog Plug-in-Verhalten
true true Der IsNonInteractive-Erstwert hat Vorrang vor dem Dialogwechsel. Das Plug-in darf kein Dialogfeld auffüllen. Diese Kombination ist nur für .NET Framework-Plug-ins gültig.
true false Der IsNonInteractive-Erstwert hat Vorrang vor dem Dialogwechsel. Das Plug-in darf nicht blockiert werden. Diese Kombination ist nur für .NET Core-Plug-ins gültig.
false true Das Plug-in sollte ein Dialogfeld anzeigen. Diese Kombination ist nur für .NET Framework-Plug-ins gültig.
false false Das Plug-In sollte/darf kein Dialogfeld anzeigen. Das Plug-in sollte den Gerätefluss verwenden, um sich zu authentifizieren, indem eine Anweisungsmeldung protokolliert wird. Diese Kombination ist nur für .NET Core-Plug-ins gültig.

Bitte lesen Sie die folgenden Spezifikationen, bevor Sie ein Plug-in schreiben.