Authentification des flux avec des fournisseurs d’informations d’identification nuget.exe

Dans la version 3.3, la prise en charge des fournisseurs de titres spécifiques à nuget.exe (v1) a été ajoutée. Depuis lors, le 4.8support des fournisseurs d'informations d'identification (v2) fonctionnant dans tous les scénarios de ligne de commande (nuget.exe, dotnet.exe, msbuild.exe, ) a été ajoutée.

Pour plus d’informations sur toutes les approches d’authentification pour , consultez Consommation de packages à partir de flux authentifiés.

Découverte du fournisseur d’informations d’identification nuget.exe

Les fournisseurs d’informations d’identification nuget.exe peuvent être utilisés de 3 façons :

  • Au niveau global : pour rendre un fournisseur d’informations d’identification disponible pour toutes les instances d’exécution nuget.exe sous le profil de l’utilisateur actuel, ajoutez-le à %LocalAppData%\NuGet\CredentialProviders. Vous devrez peut-être créer le dossier CredentialProviders. Les fournisseurs d’informations d’identification peuvent être installés à la racine du dossier CredentialProviders ou dans un sous-dossier. Si un fournisseur d’informations d’identification a plusieurs fichiers/assemblys, vous pouvez utiliser des sous-dossiers pour maintenir l’organisation des fournisseurs.

  • À partir d’une variable d’environnement : les fournisseurs d’informations d’identification peuvent être stockés n’importe où et accessibles à nuget.exe en définissant la variable d’environnement %NUGET_CREDENTIALPROVIDERS_PATH% dans l’emplacement du fournisseur. Cette variable peut être une liste séparée par des points-virgules (par exemple, path1;path2) si vous avez plusieurs emplacements.

  • En même temps que nuget.exe : les fournisseurs d’informations d’identification nuget.exe peuvent être placés dans le même dossier que nuget.exe.

Lors du chargement des fournisseurs d’informations d’identification, nuget.exe recherche les emplacements ci-dessus, dans l’ordre, pour tout fichier nommé credentialprovider*.exe, puis charge ces fichiers dans l’ordre dans lequel ils sont trouvés. Si plusieurs fournisseurs d’informations d’identification existent dans le même dossier, ils sont chargés par ordre alphabétique.

Création d’un fournisseur d’informations d’identification nuget.exe

Un fournisseur d’informations d’identification est un exécutable de ligne de commande, nommé dans le formulaire CredentialProvider*.exe, qui rassemble les entrées, acquiert les informations d’identification selon les besoins, puis retourne le code d’état de sortie approprié et la sortie standard.

Un fournisseur doit procéder comme suit :

  • Déterminer s’il peut fournir des informations d’identification pour l’URI ciblé avant de lancer l’acquisition d’informations d’identification. Si ce n’est pas le cas, il doit retourner le code d’état 1 sans informations d’identification.
  • Ne pas modifier NuGet.Config (par exemple, définir les informations d’identification là-bas).
  • Gérer la configuration du proxy HTTP lui-même, car NuGet ne fournit pas d’informations de proxy au plug-in.
  • Retourner des informations d’identification ou des détails d’erreur à nuget.exe en écrivant un objet de réponse JSON (voir ci-dessous) dans stdout, à l’aide de l’encodage UTF-8.
  • Si vous le souhaitez, émettre une journalisation du suivi supplémentaire à stderr. Aucun secret ne doit jamais être écrit dans stderr, car à des niveaux de détail « »normal »» ou « détaillé » de telles traces sont renvoyées par NuGet à la console.
  • Les paramètres inattendus doivent être ignorés, ce qui offre une compatibilité ascendante avec les futures versions de NuGet.

Paramètres d’entrée

Paramètre/Option Description
Uri {value} L’URI source du package nécessitant des informations d’identification.
NonInteractive S’il est présent, le fournisseur n’émet pas d’invites interactives.
IsRetry S’il est présent, indique que cette tentative est une nouvelle tentative d’une tentative ayant échoué précédemment. Les fournisseurs utilisent généralement cet indicateur pour s’assurer qu’ils contournent tout cache existant et demandent de nouvelles informations d’identification si possible.
Verbosité {value} S’il est présent, le paramètre affichera l’une des valeurs suivantes : « normal », « silencieux » ou « détaillé ». Si aucune valeur n’est fournie, la valeur par défaut est « normal ». Les fournisseurs doivent l’utiliser comme indication du niveau de journalisation facultatif à émettre dans le flux d’erreur standard.

Codes de sortie

Code Résultats Description
0 Réussite Les informations d’identification ont été acquises avec succès et ont été écrites dans stdout.
1 ProviderNotApplicable Le fournisseur actuel ne fournit pas d’informations d’identification pour l’URI donné.
2 Échec Le fournisseur est le fournisseur correct pour l’URI donné, mais ne peut pas fournir d’informations d’identification. Dans ce cas, nuget.exe n’effectuera pas une nouvelle tentative d’authentification et échouera. Par exemple, lorsqu’un utilisateur annule une connexion interactive.

Sortie standard

Propriété Notes
Nom d’utilisateur Nom d’utilisateur pour les requêtes authentifiées.
Mot de passe Mot de passe pour les requêtes authentifiées.
Message Détails facultatifs sur la réponse, utilisés uniquement pour afficher des détails supplémentaires dans les cas d’échec.

Exemple stdout :

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

Résolution des problèmes d’un fournisseur d’informations d’identification

À l’heure actuelle, NuGet ne fournit pas une prise en charge directe pour le débogage lié aux fournisseurs d’informations d’identification personnalisés ; le problème 4598 suit ce travail.

Vous pouvez également effectuer les opérations suivantes :

  • Exécutez nuget.exe avec le commutateur -verbosity pour inspecter la sortie détaillée.

  • Ajoutez des messages de débogage aux emplacements stdout appropriés.

  • Veillez à utiliser nuget.exe 3.3 ou une version ultérieure.

  • Attachez le débogueur au démarrage avec cet extrait de code :

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