Sdílet prostřednictvím


Plug-in pro ověřování NuGet pro více platforem

Ve verzi 4.8 nebo novější můžou všichni klienti NuGet (NuGet.exe, Visual Studio, dotnet.exe a MSBuild.exe) používat ověřovací modul plug-in založený na modelu modulů plug-in pro různé platformy NuGet .

Ověřování v dotnet.exe

Visual Studio a NuGet.exe jsou ve výchozím nastavení interaktivní. NuGet.exe obsahuje přepínač, aby byl neinteraktivní. Kromě toho pluginy NuGet.exe a Visual Studio vyzvou uživatele k zadání vstupu. V dotnet.exe se nezobrazí výzva a výchozí hodnota není interaktivní.

Ověřovací mechanismus v dotnet.exe je tok zařízení. Když se operace obnovení nebo přidání balíčku spustí interaktivně, operace se pozastaví a pokyny pro dokončení ověřování se zobrazí na příkazovém řádku. Jakmile uživatel dokončí ověření, operace bude pokračovat.

Aby byla operace interaktivní, měla by projít --interactive. V současné době podporují interaktivní přepínač pouze explicitní dotnet restore příkazy a dotnet add package příkazy. Na dotnet build a dotnet publish není žádný interaktivní přepínač.

Ověřování v nástroji MSBuild

Podobně jako u dotnet.exe je MSBuild.exe ve výchozím nastavení neinteraktivní. Mechanismus ověřování MSBuild.exe je tok zařízení. Chcete-li umožnit obnovení pozastavit se a čekat na ověření, spusťte obnovení pomocí msbuild -t:restore -p:NuGetInteractive="true".

Vytvoření multiplatformního plug-inu pro ověřování

Ukázkovou implementaci najdete v modulu plug-in Microsoft Credential Provider.

Je velmi důležité, aby moduly plug-in odpovídaly požadavkům zabezpečení stanoveným klientskými nástroji NuGet. Minimální požadovaná verze modulu plug-in pro ověřování je 2.0.0. NuGet provede handshake s modulem plug-in a dotáže se na deklarace podporovaných operací. Další podrobnosti o konkrétních zprávách najdete v protokolových zprávách pluginu NuGet pro různé platformy.

NuGet nastaví úroveň protokolu a poskytne informace o proxy serveru pro plugin, pokud to bude relevantní. Protokolování do konzoly NuGet je přijatelné pouze po tom, co NuGet nastaví úroveň protokolu pro modul plug-in.

  • Chování při ověřování modulu plug-in rozhraní .NET Framework

V rozhraní .NET Framework mohou moduly plug-in vyzvat uživatele k zadání vstupu ve formě dialogového okna.

  • Chování ověřování pluginu .NET Core

V .NET Core nelze zobrazit dialogové okno. Pluginy by měly používat device flow k ověření. Modul plug-in může odesílat zprávy protokolu do NuGetu s pokyny pro uživatele. Všimněte si, že protokolování je dostupné až po nastavení úrovně protokolu na plugin. NuGet nebude z příkazového řádku přijímat žádný interaktivní vstup.

Když klient zavolá plug-in s příkazem Get Authentication Credentials, plug-iny musí odpovídat přepínači interaktivity a respektovat přepínač dialogového okna.

Následující tabulka shrnuje chování modulu plug-in pro všechny kombinace.

IsNonInteractive CanShowDialog Chování modulu plugin
true true Přepínač IsNonInteractive má přednost před přepínačem dialogového okna. Plug-in nesmí blokovat.
true false Přepínač IsNonInteractive má přednost před přepínačem dialogového okna. Plug-in nesmí blokovat.
false true Modul plug-in může v případě potřeby zobrazit dialogové okno. Například interaktivní přihlášení nebo výběr účtu.
false false Modul plug-in by měl/nemůže zobrazit dialogové okno. Plug-in má použít tok zařízení k ověření tím, že zaznamená instrukční zprávu pomocí loggeru.

Před NuGet 7.0 by NuGet vždy nastavil CanShowDialog hodnotu false v rozhraní příkazového řádku dotnet a true pro obnovení nástroje MSBuild. Od verze 7.0 bude NuGet vždy nastaven CanShowDialog na hodnotu true, ale moduly plug-in by měly stále zjišťovat, kdy grafická rozhraní nejsou k dispozici. Například při spuštění v Linuxu přes připojení SSH bez přesměrování X nebo při vzdálené relaci PowerShellu.

Před napsání modulu plug-in si projděte následující specifikace.