Complemento de autenticación multiplataforma de NuGet

En la versión 4.8+, todos los clientes NuGet (NuGet.exe, Visual Studio, dotnet.exe y MSBuild.exe) pueden usar un complemento de autenticación basado en el modelo de complementos multiplataforma de NuGet.

Autenticación en dotnet.exe

Visual Studio y NuGet.exe son interactivos de forma predeterminada. NuGet.exe contiene un modificador para hacer que no sea interactivo. Además, los complementos NuGet.exe y Visual Studio solicitan la entrada al usuario. En dotnet.exe no hay ninguna solicitud y el valor predeterminado es no ser interactivo.

El mecanismo de autenticación de dotnet.exe es el flujo del dispositivo. Cuando la operación de restauración o adición de paquetes se ejecuta de forma interactiva, la operación se bloquea y se proporcionan instrucciones al usuario en la línea de comandos sobre cómo completar las autenticaciones. Cuando el usuario complete la autenticación, la operación continuará.

Para que la operación sea interactiva, se debe pasar --interactive. Actualmente, solo los comandos explícitos dotnet restore y dotnet add package admiten un conmutador interactivo. No hay ningún conmutador interactivo en dotnet build y dotnet publish.

Autenticación en MSBuild

De forma similar a dotnet.exe, MSBuild.exe es no interactivo de forma predeterminada y el mecanismo de autenticación de MSBuild.exe es el flujo de dispositivo. Para permitir que la restauración se detenga y espere a la autenticación, llame a restore con msbuild -t:restore -p:NuGetInteractive="true".

Creación de un complemento de autenticación multiplataforma

Puede encontrar una implementación de ejemplo en Complemento de proveedor de credenciales de Microsoft.

Es muy importante que los complementos se ajusten a los requisitos de seguridad establecidos por las herramientas de cliente de NuGet. La versión mínima necesaria para que un complemento sea de autenticación es la 2.0.0. NuGet realizará el protocolo de enlace con el complemento y consultará las notificaciones de operación admitidas. Consulte los mensajes de protocolo del complemento multiplataforma de NuGet para obtener más detalles sobre los mensajes específicos.

NuGet establecerá el nivel de registro y proporcionará información de proxy al complemento cuando corresponda. El registro en la consola de NuGet solo es aceptable después de que NuGet haya establecido el nivel de registro en el complemento.

  • Comportamiento de autenticación del complemento de .NET Framework

En .NET Framework, los complementos pueden solicitar a un usuario una entrada, en forma de cuadro de diálogo.

  • Comportamiento de autenticación del complemento de .NET Core

En .NET Core no se puede mostrar un cuadro de diálogo. Los complementos deben usar el flujo de dispositivo para autenticarse. El complemento puede enviar mensajes de registro a NuGet con instrucciones al usuario. Tenga en cuenta que el registro está disponible una vez que se establece el nivel de registro en el complemento. NuGet no tomará ninguna entrada interactiva desde la línea de comandos.

Cuando el cliente llama al complemento con una obtención de credenciales de autenticación, los complementos deben ajustarse al modificador interactivity y respetar el modificador dialog.

En la tabla siguiente se resume cómo debe comportarse el complemento para todas las combinaciones.

IsNonInteractive CanShowDialog Comportamiento del complemento
true true El modificador IsNonInteractive tiene prioridad sobre el modificador dialog. El complemento no puede abrir un cuadro de diálogo. Esta combinación solo es válida para los complementos de .NET Framework
true false El modificador IsNonInteractive tiene prioridad sobre el modificador dialog. No se permite bloquear el complemento. Esta combinación solo es válida para los complementos de .NET Core
false true El complemento debe mostrar un cuadro de diálogo. Esta combinación solo es válida para los complementos de .NET Framework
false false El complemento no debe ni puede mostrar un cuadro de diálogo. El complemento debe usar el flujo de dispositivo para autenticarse mediante el registro de un mensaje de instrucción desde el registrador. Esta combinación solo es válida para los complementos de .NET Core

Consulte las siguientes especificaciones antes de escribir un complemento.