Condividi tramite


Plug-in di autenticazione multipiattaforma NuGet

Nella versione 4.8+, tutti i client NuGet (NuGet.exe, Visual Studio, dotnet.exe e MSBuild.exe) possono usare un plug-in di autenticazione basato sul modello multipiattaforma NuGet .

Autenticazione in dotnet.exe

Visual Studio e NuGet.exe sono interattivi per impostazione predefinita. NuGet.exe contiene un'opzione per renderla non interattiva. Inoltre, i plug-in NuGet.exe e Visual Studio richiedono all'utente l'input. In dotnet.exe non vengono fornite richieste e l'impostazione predefinita è non interattiva.

Il meccanismo di autenticazione in dotnet.exe è il flusso del dispositivo. Quando l'operazione di ripristino o aggiunta pacchetto viene eseguita in modo interattivo, l'operazione si blocca e saranno fornite istruzioni all'utente su come completare le autenticazioni nella riga di comando. Quando l'utente completa l'autenticazione, l'operazione continuerà.

Per rendere interattiva l'operazione, è necessario passare --interactive. Attualmente solo i comandi espliciti dotnet restore e dotnet add package supportano un commutatore interattivo. Non è disponibile alcun interruttore interattivo su dotnet build e dotnet publish.

Autenticazione in MSBuild

Analogamente a dotnet.exe, MSBuild.exe è per impostazione predefinita non interattiva, il meccanismo di autenticazione MSBuild.exe è il flusso del dispositivo. Per consentire al ripristino di sospendere e attendere l'autenticazione, chiamare il ripristino con msbuild -t:restore -p:NuGetInteractive="true".

Creazione di un plug-in di autenticazione multipiattaforma

Un'implementazione di esempio è disponibile nel plug-in Microsoft Credential Provider.

È molto importante che i plug-in siano conformi ai requisiti di sicurezza stabiliti dagli strumenti client NuGet. La versione minima necessaria per un plug-in di autenticazione è 2.0.0. NuGet eseguirà l'handshake con il plugin ed eseguirà la query per le affermazioni delle operazioni supportate. Per ulteriori dettagli sui messaggi specifici, fare riferimento ai messaggi del protocollo del plug-in NuGet multipiattaforma.

NuGet imposta il livello di log e fornisce informazioni proxy al plug-in, se applicabile. La registrazione nella console NuGet è accettabile solo dopo che NuGet ha impostato il livello di log sul plug-in.

  • Comportamento di autenticazione del plug-in .NET Framework

In .NET Framework i plug-in possono richiedere input a un utente, sotto forma di finestra di dialogo.

  • Comportamento di autenticazione del plug-in .NET Core

In .NET Core non è possibile visualizzare una finestra di dialogo. I plug-in devono usare il flusso del dispositivo per l'autenticazione. Il plug-in può inviare messaggi di log a NuGet con istruzioni all'utente. Si noti che la registrazione è disponibile dopo che il livello di log è stato impostato sul plug-in. NuGet non accetta alcun input interattivo dalla riga di comando.

Quando il client chiama il plug-in con un ottieni credenziali di autenticazione, i plug-in devono essere conformi all'opzione di interattività e rispettare l'opzione del dialogo.

La tabella seguente riepiloga il comportamento del plug-in per tutte le combinazioni.

ÈNonInterattivo CanShowDialog Comportamento del plug-in
true true L'opzione IsNonInteractive ha la precedenza sull'opzione di dialogo. Non è consentito che il plug-in blocchi.
true false L'opzione IsNonInteractive ha la precedenza sull'opzione di dialogo. Non è consentito che il plug-in blocchi.
false true Se necessario, il plug-in può visualizzare una finestra di dialogo. Ad esempio, accesso interattivo o selezione dell'account.
false false Il plug-in non dovrebbe/può visualizzare una finestra di dialogo. Il plug-in deve usare il flusso del dispositivo per l'autenticazione registrando un messaggio di istruzione tramite il logger.

Prima di NuGet 7.0, NuGet impostava sempre CanShowDialog su false nella CLI dotnet e su true per il ripristino di MSBuild. A partire dalla versione 7.0, NuGet imposterà sempre l'opzione CanShowDialog su true, ma i plug-in dovrebbero comunque rilevare quando le interfacce grafiche non sono disponibili. Ad esempio, quando si esegue in Linux tramite una connessione SSH senza inoltro X o una sessione remota di PowerShell.

Prima di scrivere un plug-in, vedere le specifiche seguenti.