Partager via


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-ins multiplateformes 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. Dans dotnet.exe il n’y a pas d’invite et la valeur par défaut n’est pas interactive.

Le mécanisme d’authentification dans dotnet.exe est le flux d'appareils. 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 fournies 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 passer --interactive. Actuellement, seules les commandes explicites dotnet restore et dotnet add package prennent en charge un commutateur interactif. Il n’y a pas de commutateur interactif sur dotnet build et dotnet publish.

Authentification dans MSBuild

Comme pour dotnet.exe, MSBuild.exe est par défaut non interactif ; le mécanisme d'authentification de MSBuild.exe utilise le flux d'appareil. Pour permettre à la restauration de suspendre 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 2.0.0. NuGet effectue l’établissement d’une liaison avec le plug-in et interroge les revendications d’opération prises en charge. Pour plus d’informations sur les messages spécifiques, reportez-vous aux messages du protocole multiplateforme du plug-in NuGet .

NuGet définit le niveau du journal 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 NuGet défini le niveau de journal 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 une entrée sous la forme d’une boîte de dialogue.

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

Dans .NET Core, une boîte de dialogue ne peut pas ê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 journal défini sur le plug-in. NuGet ne prend aucune entrée interactive à partir de la ligne de commande.

Lorsque le client appelle le plug-in avec une demande d'obtention des informations d'authentification, le plug-in doit se conformer au commutateur d’interactivité et respecter le paramètre de dialogue.

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

IsNonInteractive PeutAfficherDialogue Comportement du plug-in
true true Le commutateur IsNonInteractive est prioritaire sur le commutateur de dialogue. Le plug-in n’est pas autorisé à bloquer.
true false Le commutateur IsNonInteractive est prioritaire sur le commutateur de dialogue. Le plug-in n’est pas autorisé à bloquer.
false true Le plug-in peut afficher une boîte de dialogue si nécessaire. Par exemple, la connexion interactive ou la sélection de compte.
false false Le plug-in doit/ne peut pas afficher une boîte de dialogue. Le plug-in doit utiliser le flux d’appareil pour s’authentifier en journalisant un message d’instruction via l’enregistreur d’événements.

Avant NuGet 7.0, NuGet définissait toujours la valeur à false sur l’interface CLI de dotnet et la valeur à true pour la restauration MSBuild. À partir de la version 7.0, NuGet définira toujours CanShowDialog sur true, mais les plug-ins doivent encore détecter l'absence d'interfaces graphiques. Par exemple, lors de l’exécution sur Linux via une connexion SSH sans transfert X11, ou lors d'une session à distance PowerShell.

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