Dela via


NuGet-plugin-program för plattformsoberoende autentisering

I version 4.8+ kan alla NuGet-klienter (NuGet.exe, Visual Studio, dotnet.exe och MSBuild.exe) använda ett plugin-program för autentisering som bygger på NuGet-plattformsoberoende plugin-program .

Autentisering i dotnet.exe

Visual Studio och NuGet.exe är som standard interaktiva. NuGet.exe innehåller en växel för att göra den icke-interaktiv. Dessutom uppmanar NuGet.exe- och Visual Studio-plugin-program användaren att ange indata. I dotnet.exe finns det ingen uppmaning och standardvärdet är icke-interaktivt.

Autentiseringsmekanismen i dotnet.exe är enhetsflöde. När återställnings- eller tilläggspaketåtgärden körs interaktivt, pausas åtgärden och instruktioner om hur användaren ska slutföra autentiseringarna kommer att ges i kommandoraden. När användaren har slutfört autentiseringen fortsätter åtgärden.

För att göra åtgärden interaktiv bör en skicka --interactive. För närvarande har endast explicita dotnet restore kommandon och dotnet add package kommandon stöd för en interaktiv växel. Det finns ingen interaktiv växel på dotnet build och dotnet publish.

Autentisering i MSBuild

På samma sätt som dotnet.exeär MSBuild.exe som standard inte interaktivt MSBuild.exe autentiseringsmekanismen är enhetsflöde. Om du vill tillåta att återställningen pausar och väntar på autentisering anropar du återställningen med msbuild -t:restore -p:NuGetInteractive="true".

Skapa ett plugin-program för plattformsoberoende autentisering

En exempelimplementering finns i plugin-programmet Microsoft Credential Provider.

Det är mycket viktigt att plugin-programmen överensstämmer med de säkerhetskrav som anges av NuGet-klientverktygen. Den lägsta version som krävs för att ett plugin-program ska vara ett plugin-program för autentisering är 2.0.0. NuGet utför handskakningen med plugin-programmet och frågar efter de åtgärdsanspråk som stöds. Se NuGet-pluginkomponenten protokollmeddelanden för plattformsoberoende för mer information om de specifika meddelandena.

NuGet anger loggnivån och anger proxyinformation till plugin-programmet när det är tillämpligt. Loggning till NuGet-konsolen är endast acceptabelt när NuGet har angett loggnivån till plugin-programmet.

  • Autentiseringsbeteende för .NET Framework-plugin-program

I .NET Framework kan plugin-program uppmana en användare att ange indata i form av en dialogruta.

  • Autentiseringsbeteende för .NET Core-plugin-program

Det går inte att visa en dialogruta i .NET Core. Plugin-program bör använda enhetsflödet för att autentisera. Plugin-programmet kan skicka loggmeddelanden till NuGet med instruktioner till användaren. Observera att loggning är tillgänglig när loggnivån har angetts till plugin-programmet. NuGet tar inga interaktiva indata från kommandoraden.

När klienten anropar plugin-programmet med autentiseringsuppgifter, måste plugin-programmen rätta sig efter interaktivitetsinställningen och respektera dialogläget.

I följande tabell sammanfattas hur plugin-programmet ska fungera för alla kombinationer.

IsNonInteractive CanShowDialog Beteende för plugin-program
true true IsNonInteractive-växeln har företräde framför dialogväxeln. Plugin-programmet får inte blockera.
true false IsNonInteractive-växeln har företräde framför dialogväxeln. Plugin-programmet får inte blockera.
false true Plugin-programmet kan visa en dialogruta om det behövs. Till exempel interaktiv inloggning eller kontoval.
false false Plugin-programmet bör/kan inte visa en dialogruta. Plugin-programmet bör använda enhetsflödet för att autentisera genom att logga ett instruktionsmeddelande via loggaren.

Före NuGet 7.0 skulle NuGet alltid sätta CanShowDialog till falskt på dotnet CLI och till sant för MSBuild-återställning. Från 7.0 kommer NuGet alltid att sätta CanShowDialog till sann, men plugins bör fortfarande identifiera när grafiska gränssnitt inte är tillgängliga. Till exempel när du kör på Linux via en SSH-anslutning utan X-vidarebefordran eller en PowerShell-fjärrsession.

Läs följande specifikationer innan du skriver ett plugin-program.