Authentification des flux dans Visual Studio avec des fournisseurs d’informations d’identification NuGet

NuGet Visual Studio Extension 3.6+ prend en charge les fournisseurs d’informations d’identification, qui permettent à NuGet d’utiliser des flux authentifiés. Après avoir installé un fournisseur d’informations d’identification NuGet pour Visual Studio, l’extension NuGet Visual Studio acquiert et actualise automatiquement les identifiants des flux authentifiés si nécessaire.

Vous trouverez un échantillon d’implémentation dans l’échantillon VsCredentialProvider.

Dans Visual Studio, NuGet utilise un élément VsCredentialProviderImporter interne qui analyse également les fournisseurs d’informations d’identification de plug-in. Ces fournisseurs d’informations d’identification de plug-in doivent être détectables en tant qu’exportation MEF de type IVsCredentialProvider.

À compter de la version 4.8+, NuGet dans Visual Studio prend également en charge les nouveaux plug-ins d’authentification multiplateforme, mais ils ne constituent pas l’approche recommandée pour des raisons de performances.

Remarque

Les fournisseurs d’informations d’identification NuGet pour Visual Studio doivent être installés en tant qu’extension Visual Studio standard et nécessiteront Visual Studio 2017 ou une version ultérieure.

Les fournisseurs d’informations d’identification NuGet pour Visual Studio fonctionnent uniquement dans Visual Studio (non dans dotnet restore ou dans nuget.exe). Pour connaître les fournisseurs d’informations d’identification avec nuget.exe, consultez la rubrique sur les fournisseurs d’informations d’identification nuget.exe. Pour les fournisseurs d’informations d’identification dans dotnet et msbuild, consultez la rubrique sur les plug-ins multiplateformes NuGet

Création d’un fournisseur d’informations d’identification NuGet pour Visual Studio

NuGet Visual Studio Extension 3.6+ implémente un CredentialService interne utilisé pour acquérir des identifiants. CredentialService contient une liste de fournisseurs d’informations d’identification prédéfinis et plug-in. Chaque fournisseur est essayé séquentiellement jusqu’à ce que les identifiants soient acquis.

Lors de l’acquisition des identifiants, le service d’informations d’identification essaiera les fournisseurs d’informations d’identification dans l’ordre suivant, en s’arrêtant dès que les identifiants seront acquis :

  1. Les identifiants sont extraits des fichiers de configuration NuGet (à l’aide de l’élément SettingsCredentialProvider prédéfini).
  2. Si la source du package se trouve sur Visual Studio Team Services, l’élément VisualStudioAccountProvider est utilisé.
  3. Tous les autres fournisseurs d’informations d’identification Visual Studio de plug-in seront essayés de manière séquentielle.
  4. Essayez d’utiliser tous les fournisseurs d’informations d’identification multiplateformes NtuGet de manière séquentielle.
  5. Si aucun identifiant n’a encore été acquis, l’utilisateur est invité à entrer des informations d’identification à l’aide d’une boîte de dialogue d’authentification de base standard.

Implémentation d’IVsCredentialProvider.GetCredentialsAsync

Pour créer un fournisseur d’informations d’identification NuGet pour Visual Studio, créez une extension Visual Studio qui expose une exportation MEF publique qui implémente le type IVsCredentialProvider et respecte les principes décrits ci-dessous.

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

Vous trouverez un échantillon d’implémentation dans l’échantillon VsCredentialProvider.

Chaque fournisseur d’informations d’identification NuGet pour Visual Studio doit :

  1. Déterminer s’il peut fournir des identifiants pour l’URI ciblé avant de lancer l’acquisition d’informations d’identification. Si le fournisseur ne peut pas fournir d’identifiants pour la source ciblée, il doit renvoyer null.
  2. Si le fournisseur gère les demandes pour l’URI ciblé, mais ne peut pas fournir d’identifiants, une exception doit être émise.

Un fournisseur d’informations d’identification NuGet personnalisé pour Visual Studio doit implémenter l’interface IVsCredentialProvider disponible dans le package NuGet.VisualStudio.

GetCredentialAsync

Paramètre d’entrée Description
Uri d’URI URI source du package pour lequel des identifiants sont demandés.
Proxy IWebProxy Proxy web à utiliser lors de la communication sur le réseau. Nul s’il n’existe aucune authentification du proxy configurée.
bool isProxyRequest True si cette requête consiste à obtenir les identifiants d’authentification du proxy. Si l’implémentation n’est pas valide pour l’acquisition d’identifiants du proxy, la valeur nulle doit être renvoyée.
bool isRetry True si des identifiants ont été demandés précédemment pour cet URI, mais si les identifiants fournis n’ont pas autorisé l’accès.
bool nonInteractive Si la valeur est true, le fournisseur d’informations d’identification doit masquer toutes les invites utilisateur et utiliser des valeurs par défaut à la place.
CancellationToken cancellationToken Ce jeton d’annulation doit être vérifié pour déterminer si l’opération demandant des identifiants a été annulée.

Valeur de retour : objet d’identifiants implémentant l’interface System.Net.ICredentials.