Condividi tramite


Utilizzo di pacchetti da feed autenticati

Molte operazioni NuGet, ad esempio il ripristino e l'installazione, richiedono la comunicazione con una o più origini di pacchetti, che possono essere configurate nei filenuget.config.

Annotazioni

Utilizzare fonti di pacchetti attendibili.

Per i feed HTTP, NuGet effettuerà una richiesta non autenticata e, se il server risponde con una risposta HTTP 401, NuGet cercherà le credenziali nell'ordine seguente:

  1. Variabile NuGetPackageSourceCredentials_{name}di ambiente .
  2. Credenziali nei file nuget.config.
  3. Usare un provider di credenziali NuGet, se l'origine del pacchetto ne fornisce una.

Le credenziali da usare sono determinate dall'origine del pacchetto. Pertanto, a meno che non si usi un provider di credenziali, è necessario verificare con l'origine del pacchetto le credenziali da usare. È molto comune che le origini dei pacchetti impediscano l'uso della password (che si accede al sito Web con) con NuGet. In genere è necessario creare un token di accesso personale da usare come password di NuGet, ma è necessario controllare la documentazione relativa al server NuGet in uso. Alcune origini di pacchetti, ad esempio Azure DevOps e GitHub, hanno token di accesso con ambito, quindi potrebbe essere necessario assicurarsi che tutti i token creati includano l'ambito richiesto.

Procedure consigliate per la sicurezza per la gestione delle credenziali

Anche se NuGet cerca le credenziali nell'ordine indicato in precedenza, è consigliabile usare la sequenza seguente per gestire in modo sicuro le credenziali durante l'autenticazione con feed privati:

  1. Provider di credenziali: è consigliabile usare un provider di credenziali quando possibile. Questo approccio evita di archiviare segreti in testo normale e riduce al minimo il rischio di esporre accidentalmente i segreti tramite il controllo del codice sorgente. Inoltre, in genere riduce il numero di posizioni che è necessario aggiornare quando una credenziale scade o cambia. Se il provider di credenziali supporta l'accesso Single Sign-On, può diminuire la frequenza degli accessi o il numero di posizioni in cui è necessario salvare le credenziali. Per altre informazioni, vedere la sezione Provider di credenziali .

  2. Credenziali crittografate in nuget.config: se un provider di credenziali non è disponibile, è consigliabile usare le credenziali crittografate. Questo approccio offre un livello aggiuntivo di sicurezza archiviando le credenziali in un formato crittografato. Per altre informazioni, vedere la sezione relativa alle credenziali nei file dinuget.config.

    Annotazioni

    Tenere presente che le password crittografate sono supportate solo in Windows. Inoltre, possono essere decrittografati solo nello stesso computer e dallo stesso utente che le ha originariamente crittografate.

  3. Uso delle macro delle variabili di ambiente in nuget.config: Se non è possibile usare le credenziali crittografate, è consigliabile archiviare le credenziali nel file nuget.config utilizzando le macro delle variabili di ambiente. Questo approccio consente di fare riferimento alle variabili di ambiente che contengono le credenziali effettive. Migliora la trasparenza e aiuta gli utenti finali a comprendere come vengono configurate le credenziali. Per altre informazioni, vedere la sezione relativa alle credenziali nei file dinuget.config.

  4. Usando direttamente le variabili di ambiente: come opzione di fallback, è possibile archiviare le credenziali direttamente nelle variabili di ambiente. Tenere tuttavia presente che questo approccio può offrire una visibilità e un controllo inferiori rispetto all'uso delle macro delle variabili di ambiente nel file nuget.config . Per altre informazioni, vedere la sezione relativa alle credenziali nelle variabili di ambiente.

  5. Cancella credenziali di testo in NuGet.Config: è consigliabile usare una delle opzioni indicate in precedenza. Se queste opzioni non sono fattibili, è possibile archiviare le credenziali nel file nuget.config . Tuttavia, questa opzione deve essere usata solo negli ambienti in cui non è disponibile nessun'altra opzione sicura. Per altre informazioni, vedere la sezione relativa alle credenziali nei file dinuget.config.

    Avvertimento

    L'archiviazione delle credenziali in testo non crittografato nel file dinuget.config , soprattutto quando si salva il file nel controllo del codice sorgente, è rischioso perché aumenta la probabilità di perdite accidentali di credenziali. Se è necessario archiviare le credenziali nel file nuget.config , è consigliabile usare una delle opzioni più sicure indicate in precedenza.

Rispettando queste procedure consigliate, è possibile autenticare in modo sicuro i feed privati riducendo al minimo il rischio di esposizione delle informazioni riservate.

Credenziali nelle variabili di ambiente

NuGet cercherà una variabile di ambiente denominata NuGetPackageSourceCredentials_{name}, dove {name} è il valore di key="name" nell'origine del pacchetto del file nuget.config . Il valore della variabile di ambiente deve essere Username={username};Password={password}e può includere ;ValidAuthenticationTypes={types}facoltativamente . Se la variabile di ambiente non corrisponde alla convenzione di NuGet o il valore non soddisfa il modello previsto di NuGet, NuGet ignorerà automaticamente la variabile di ambiente e continuerà a cercare le credenziali per l'origine del pacchetto altrove. Non sono presenti log per segnalare che NuGet usa le credenziali della variabile di ambiente, che può causare difficoltà nel debug dei problemi di autenticazione se la variabile di ambiente contiene un segreto scaduto e il nuovo segreto viene aggiunto a un file nuget.config , poiché il file di configurazione ha una precedenza inferiore.

Suggerimento

L'uso di variabili di ambiente nelle pipeline CI/CD è un'ottima scelta per ridurre al minimo il rischio di acquisizione dei segreti nei log.

Si consideri ad esempio il seguente file nuget.config:

<configuration>
  <packageSources>
    <clear />
    <add key="Contoso" value="https://nuget.contoso.com/v3/index.json" />
  </packageSources>
</configuration>

In questo caso, il nome dell'origine è Contoso e NuGet cercherà il nome NuGetPackageSourceCredentials_Contosodella variabile di ambiente . Alcune piattaforme fanno distinzione tra maiuscole e minuscole, quindi prestare attenzione all'uso dei caratteri maiuscoli e minuscoli corretti per il nome dell'ambiente e il nome dell'origine, come definito nel file nuget.config .

Se il nome utente è e la password è nugetUsersecret123, il valore della variabile di ambiente deve essere impostato su Username=nugetUser;Password=secret123. Se NuGet deve usare questa credenziale solo per l'autenticazione HTTP Basic, ma non altri schemi di autenticazione, è possibile impostare il valore della variabile di ambiente su Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basic. Per altre informazioni sui tipi di autenticazione validi, vedere la documentazione sulle credenziali del pacchetto nei file nuget.config.

Annotazioni

Le variabili di ambiente hanno restrizioni sui caratteri consentiti e i diversi sistemi operativi possono avere restrizioni diverse. Ad esempio, gli spazi non sono consentiti. Pertanto, si usa questa funzionalità di variabile di ambiente per specificare le credenziali NuGet per le origini del pacchetto che usano caratteri non validi per le variabili di ambiente della piattaforma. In questi casi, è necessario rinominare l'origine del pacchetto nel file nuget.config .

Credenziali nei file nuget.config

nuget.config file possono contenere le credenziali dell'origine del pacchetto. Per ulteriori informazioni, inclusa la sintassi, consultare la sezione della documentazione di riferimento sul file nuget.config relativa alle credenziali per l'origine del pacchetto. Tuttavia, è più facile usare dotnet nuget update source nella riga di comando per impostare le credenziali.

Avvertimento

Prestare attenzione quando si impostano le credenziali nei file nuget.config , soprattutto quando si salvano le credenziali come testo normale. Se le credenziali vengono scritte in un file dinuget.config che si trova nel controllo del codice sorgente, esiste un rischio maggiore di perdita accidentale del segreto.

Poiché NuGet accumula le impostazioni da più file, è consigliabile salvare le credenziali nel file dinuget.config utente. È anche consigliabile salvare le origini dei pacchetti nel file nuget.config della soluzione (repository del codice sorgente), inclusa un elemento <clear />, per l'affidabilità della compilazione.

Il nome utente e la password di testo normale in un file dinuget.config possono usare una variabile di ambiente aggiungendo % all'inizio e alla fine del nome della variabile di ambiente che si vuole usare. Per altre informazioni, vedere la documentazione di riferimentonuget.configsull'uso delle variabili di ambiente.

Provider di credenziali

NuGet ha un modello di estendibilità, consentendo ai plug-in di fornire credenziali NuGet. Il percorso in cui devono essere installati i provider di credenziali, per consentire a NuGet di individuare, è diverso per .NET Framework (NuGet.exe, MSBuild e Visual Studio) e .NET SDK (in esecuzione nel runtime .NET 5+).

NuGet prevede l'esecuzione in modalità interattiva o non interattiva. Quando in modalità non interattiva, ai provider di credenziali viene chiesto di non bloccare NuGet. In modalità interattiva, il provider di credenziali potrebbe richiedere l'accesso. Diversi strumenti hanno impostazioni predefinite diverse, quindi la modalità interattiva potrebbe dover essere attivata o disattivata esplicitamente, a seconda del tuo scenario.

Strumento Predefinito Interruttore
dotnet CLI non interattivo --interactive discussione. Ad esempio: dotnet restore --interactive.
MSBuild non interattivo NuGetInteractive Proprietà MSBuild. Ad esempio: msbuild -t:restore -p:NuGetInteractive=true.
NuGet.exe interattivo -NonInteractive discussione. Ad esempio: nuget.exe restore -NonInteractive.
Visual Studio interattivo non è possibile eseguire in modalità non interattiva.

NuGet.exe supporta provider di credenziali V1 e V2, mentre MSBuild e .NET SDK supportano solo i plug-in multipiattaforma (V2).

In Visual Studio NuGet ha un'interfaccia del provider di credenziali di Visual Studio, che i provider di credenziali possono usare per offrire un'esperienza di accesso grafico o chiamare le API di Visual Studio, se necessario. NuGet in Visual Studio eseguirà il fallback ai provider di credenziali della riga di comando se non riesce a trovare un provider di credenziali di Visual Studio che gestisce l'origine.

Visual Studio 2017 versione 15.9 e successive include un provider di credenziali per Azure Artifacts, che funziona in Visual Studio, MSBuild e NuGet.exe. Tuttavia, il provider di credenziali per .NET SDK non è incluso in Visual Studio, quindi deve essere installato separatamente per funzionare con l'interfaccia della dotnet riga di comando.

Elenco di provider di credenziali

Di seguito è riportato un elenco dei provider di credenziali di cui si è a conoscenza: