Plug-in d’authentification multiplateforme NuGet

Dans la version 4.8+, tous les clients NuGet (NuGet.exe, Visual Studio, dotnet.exe et MSBuild.exe) peuvent utiliser un plug-in d’authentification basé sur le modèle de plug-in multiplateforme NuGet.

Authentification dans dotnet.exe

Visual Studio et NuGet.exe sont par défaut interactifs. NuGet.exe contient un commutateur pour le rendre non interactif. En outre, les plug-ins NuGet.exe et Visual Studio invitent l’utilisateur à entrer des données. Dans dotnet.exe, il n’y a pas d’invite et dotnet.exe est non interactif par défaut.

Le mécanisme d’authentification dans dotnet.exe est le flux d’appareil. Lorsque l’opération de restauration ou d’ajout de package est exécutée de manière interactive, les blocs d’opération et les instructions à l’utilisateur sur la façon de terminer les authentifications sont fournis sur la ligne de commande. Lorsque l’utilisateur termine l’authentification, l’opération se poursuit.

Pour rendre l’opération interactive, il convient de transférer --interactive. Actuellement, seules les commandes dotnet restore et dotnet add package explicites prennent en charge un commutateur interactif. Il n’y a pas de commutateur interactif sur dotnet build et dotnet publish.

Authentification dans MSBuild

Comme dotnet.exe, MSBuild.exe est par défaut non interactif ; le mécanisme d’authentification MSBuild.exe est le flux d’appareil. Pour autoriser la restauration à se mettre en pause et d’attendre l’authentification, appelez la restauration avec msbuild -t:restore -p:NuGetInteractive="true".

Création d’un plug-in d’authentification multiplateforme

Vous trouverez un exemple d’implémentation dans le plug-in Fournisseur d’informations d’identification Microsoft.

Il est très important que les plug-ins soient conformes aux exigences de sécurité définies par les outils clients NuGet. La version minimale requise pour qu’un plug-in soit un plug-in d’authentification est la version 2.0.0. NuGet effectue l’établissement d’une liaison avec le plug-in et la requête pour les revendications d’opération prises en charge. Veuillez vous reporter aux messages de protocole du plug-in multiplateforme NuGet pour plus de détails sur les messages spécifiques.

NuGet définit le niveau de consignation et fournit des informations de proxy au plug-in le cas échéant. La journalisation dans la console NuGet n’est acceptable qu’une fois que NuGet a défini le niveau de consignation sur le plug-in.

  • Comportement d’authentification du plug-in .NET Framework

Dans .NET Framework, les plug-ins sont autorisés à inviter un utilisateur à entrer des données sous la forme d’une boîte de dialogue.

  • Comportement d’authentification du plug-in .NET Core

Dans .NET Core, aucune boîte de dialogue ne peut être affichée. Les plug-ins doivent utiliser le flux d’appareil pour s’authentifier. Le plug-in peut envoyer des messages de journal à NuGet avec des instructions à l’utilisateur. Notez que la journalisation est disponible une fois le niveau de consignation défini sur le plug-in. NuGet ne prend aucune entrée interactive de la ligne de commande.

Lorsque le client appelle le plug-in avec des identifiants d’authentification Get, les plug-ins doivent se conformer au commutateur d’interactivité et respecter le commutateur de la boîte de dialogue.

Le tableau suivant résume le comportement exigé du plug-in pour toutes les combinaisons.

IsNonInteractive CanShowDialog Comportement du plug-in
true true Le commutateur IsNonInteractive est prioritaire sur le commutateur de dialogue. Le plug-in n’est pas autorisé à afficher une boîte de dialogue. Cette combinaison est valide uniquement pour les plug-ins .NET Framework
true false Le commutateur IsNonInteractive est prioritaire sur le commutateur de dialogue. Le plug-in n’est pas autorisé à se bloquer. Cette combinaison n’est valide que pour les plug-ins .NET Core
false true Le plug-in doit afficher une boîte de dialogue. Cette combinaison est valide uniquement pour les plug-ins .NET Framework
false false Le plug-in ne doit/ne peut pas afficher de boîte de dialogue. Le plug-in doit utiliser le flux d’appareil pour s’authentifier par journalisation d’un message d’instruction via l’enregistreur d’événements. Cette combinaison n’est valide que pour les plug-ins .NET Core

Veuillez vous reporter aux spécifications suivantes avant d’écrire un plug-in.