Autenticazione dei feed con provider di credenziali nuget.exe

Nel supporto della versione 3.3 è stato aggiunto per nuget.exe provider di credenziali specifici (v1). Da allora, è stato aggiunto il supporto della versione 4.8per i provider di credenziali (v2) che funzionano in tutti gli scenari della riga di comando (nuget.exe, dotnet.exe, msbuild.exe).

Per altri dettagli su tutti gli approcci di autenticazione, vedere Utilizzo di pacchetti da feed autenticati.

individuazione del provider di credenziali nuget.exe

nuget.exe provider di credenziali possono essere usati in 3 modi:

  • A livello globale: per rendere disponibile un provider di credenziali per tutte le istanze di nuget.exe esecuzione nel profilo dell'utente corrente, aggiungerlo a %LocalAppData%\NuGet\CredentialProviders. Potrebbe essere necessario creare la CredentialProviders cartella . I provider di credenziali possono essere installati nella radice della CredentialProviders cartella o all'interno di una sottocartella. Se un provider di credenziali ha più file/assembly, è possibile usare sottocartelle per mantenere organizzati i provider.

  • Da una variabile di ambiente: i provider di credenziali possono essere archiviati ovunque e resi accessibili nuget.exe impostando la %NUGET_CREDENTIALPROVIDERS_PATH% variabile di ambiente sul percorso del provider. Questa variabile può essere un elenco delimitato da punto e virgola (ad esempio, path1;path2) se sono presenti più posizioni.

  • Insieme nuget.exe: nuget.exe provider di credenziali possono essere inseriti nella stessa cartella di nuget.exe.

Quando si caricano provider di credenziali, nuget.exe cerca i percorsi precedenti, in ordine, per qualsiasi file denominato credentialprovider*.exe, quindi carica tali file nell'ordine in cui vengono trovati. Se nella stessa cartella esistono più provider di credenziali, vengono caricati in ordine alfabetico.

Creazione di un provider di credenziali nuget.exe

Un provider di credenziali è un eseguibile della riga di comando, denominato nel formato CredentialProvider*.exe, che raccoglie gli input, acquisisce le credenziali in base alle esigenze e quindi restituisce il codice di stato di uscita appropriato e l'output standard.

Un provider deve eseguire le operazioni seguenti:

  • Determinare se può fornire le credenziali per l'URI di destinazione prima di avviare l'acquisizione delle credenziali. In caso contrario, deve restituire il codice di stato 1 senza credenziali.
  • Non modificare NuGet.Config (ad esempio l'impostazione delle credenziali).
  • Gestire autonomamente la configurazione del proxy HTTP, perché NuGet non fornisce informazioni sul proxy al plug-in.
  • Restituire le credenziali o i dettagli dell'errore a nuget.exe scrivendo un oggetto risposta JSON (vedere di seguito) in stdout, usando la codifica UTF-8.
  • Facoltativamente, generare ulteriori registrazioni di traccia in stderr. Nessun segreto deve essere mai scritto in stderr, poiché a livelli di dettaglio "normale" o "dettagliato" tali tracce vengono restituite da NuGet alla console.
  • I parametri imprevisti devono essere ignorati, garantendo la compatibilità con le versioni future di NuGet.

Parametri di input

Parametro/commutatore Descrizione
URI {value} URI dell'origine del pacchetto che richiede credenziali.
NonInteractive Se presente, il provider non invia richieste interattive.
IsRetry Se presente, indica che questo tentativo è un nuovo tentativo di un tentativo non riuscito in precedenza. I provider usano in genere questo flag per assicurarsi di ignorare qualsiasi cache esistente e richiedere nuove credenziali, se possibile.
Dettaglio {value} Se presente, uno dei valori seguenti: "normal", "quiet" o "detailed". Se non viene specificato alcun valore, il valore predefinito è "normal". I provider devono usarlo come indicazione del livello di registrazione facoltativa da generare nel flusso di errore standard.

Codici di uscita

Code Risultato Descrizione
0 Riuscita Le credenziali sono state acquisite correttamente e sono state scritte in stdout.
1 ProviderNotApplicable Il provider corrente non fornisce le credenziali per l'URI specificato.
2 Errore Il provider è il provider corretto per l'URI specificato, ma non può fornire le credenziali. In questo caso, nuget.exe non ritentare l'autenticazione e avrà esito negativo. Un esempio tipico è quando un utente annulla un account di accesso interattivo.

Output standard

Proprietà Note
Username Nome utente per le richieste autenticate.
Password Password per le richieste autenticate.
Messaggio Dettagli facoltativi sulla risposta, usati solo per visualizzare dettagli aggiuntivi nei casi di errore.

Esempio di stdout:

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

Risoluzione dei problemi relativi a un provider di credenziali

Al momento, NuGet non offre un supporto diretto per il debug di provider di credenziali personalizzati; problema 4598 sta monitorando questo lavoro.

È anche possibile effettuare le seguenti operazioni:

  • Eseguire nuget.exe con l'opzione per esaminare l'output -verbosity dettagliato.

  • Aggiungere messaggi di debug a stdout in posizioni appropriate.

  • Assicurarsi di usare nuget.exe 3.3 o versione successiva.

  • Collegare il debugger all'avvio con questo frammento di codice:

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