Condividi tramite


Autenticazione dei feed in Visual Studio con provider di credenziali NuGet

L'estensione NuGet di Visual Studio 3.6+ supporta i provider di credenziali, che consentono a NuGet di usare i feed autenticati. Dopo aver installato un provider di credenziali NuGet per Visual Studio, l'estensione NuGet di Visual Studio acquisirà e aggiornerà automaticamente le credenziali per i feed autenticati in base alle esigenze.

Un'implementazione di esempio è disponibile nell'esempio vsCredentialProvider.

In Visual Studio NuGet usa un'interfaccia interna VsCredentialProviderImporter che analizza anche i provider di credenziali plug-in. Questi provider di credenziali plug-in devono essere individuabili come esportazione MEF di tipo IVsCredentialProvider.

A partire da 4.8+ NuGet in Visual Studio supporta anche i nuovi plug-in di autenticazione multipiattaforma, ma non sono l'approccio consigliato per motivi di prestazioni.

Nota

I provider di credenziali NuGet per Visual Studio devono essere installati come una normale estensione di Visual Studio e richiederanno Visual Studio 2017 o versione successiva.

I provider di credenziali NuGet per Visual Studio funzionano solo in Visual Studio (non in dotnet restore o nuget.exe). Per i provider di credenziali con nuget.exe, vedere nuget.exe provider di credenziali. Per i provider di credenziali in dotnet e msbuild, vedere Plug-in multipiattaforma NuGet

Creazione di un provider di credenziali NuGet per Visual Studio

L'estensione Di Visual Studio NuGet 3.6+ implementa un CredentialService interno usato per acquisire le credenziali. CredentialService include un elenco di provider di credenziali predefiniti e plug-in. Ogni provider viene provato in sequenza fino a quando non vengono acquisite le credenziali.

Durante l'acquisizione delle credenziali, il servizio credenziali proverà i provider di credenziali nell'ordine seguente, interrompendo non appena vengono acquisite le credenziali:

  1. Le credenziali verranno recuperate dai file di configurazione NuGet (usando il valore predefinito SettingsCredentialProvider).
  2. Se l'origine del pacchetto si trova in Visual Studio Team Services, VisualStudioAccountProvider verrà usato .
  3. Tutti gli altri provider di credenziali di Visual Studio plug-in verranno provati in sequenza.
  4. Provare a usare tutti i provider di credenziali multipiattaforma NuGet in sequenza.
  5. Se non sono ancora state acquisite credenziali, all'utente verranno richieste le credenziali usando una finestra di dialogo di autenticazione di base standard.

Implementazione di IVsCredentialProvider.GetCredentialsAsync

Per creare un provider di credenziali NuGet per Visual Studio, creare un'estensione di Visual Studio che espone un'esportazione MEF pubblica che implementa il IVsCredentialProvider tipo e rispetta i principi descritti di seguito.

public interface IVsCredentialProvider
{
    Task<ICredentials> GetCredentialsAsync(
        Uri uri,
        IWebProxy proxy,
        bool isProxyRequest,
        bool isRetry,
        bool nonInteractive,
        CancellationToken cancellationToken);
}

Un'implementazione di esempio è disponibile nell'esempio vsCredentialProvider.

Ogni provider di credenziali NuGet per Visual Studio deve:

  1. Determinare se può fornire le credenziali per l'URI di destinazione prima di avviare l'acquisizione delle credenziali. Se il provider non può fornire le credenziali per l'origine di destinazione, deve restituire null.
  2. Se il provider gestisce le richieste per l'URI di destinazione, ma non può fornire le credenziali, deve essere generata un'eccezione.

Un provider di credenziali NuGet personalizzato per Visual Studio deve implementare l'interfaccia IVsCredentialProvider disponibile nel pacchetto NuGet.VisualStudio.

GetCredentialAsync

Parametro di input Descrizione
URI URI dell'origine del pacchetto per cui vengono richieste le credenziali.
Proxy IWebProxy Proxy Web da usare durante la comunicazione in rete. Null se non è configurata alcuna autenticazione proxy.
bool isProxyRequest True se questa richiesta deve ottenere le credenziali di autenticazione proxy. Se l'implementazione non è valida per l'acquisizione delle credenziali proxy, deve essere restituito null.
bool isRetry True se le credenziali sono state richieste in precedenza per questo URI, ma le credenziali specificate non consentivano l'accesso autorizzato.
bool nonInteractive Se true, il provider di credenziali deve eliminare tutti i prompt degli utenti e usare invece i valori predefiniti.
CancellationToken CancellationToken Questo token di annullamento deve essere controllato per determinare se l'operazione che richiede credenziali è stata annullata.

Valore restituito: oggetto credentials che implementa l'interfacciaSystem.Net.ICredentials.