Поделиться через


Плагин кроссплатформенной аутентификации NuGet

В версии 4.8+ все клиенты NuGet (NuGet.exe, Visual Studio, dotnet.exe и MSBuild.exe) могут использовать плагин аутентификации, основанный на модели кроссплатформенных плагинов NuGet.

Проверка подлинности в dotnet.exe

Visual Studio и NuGet.exe по умолчанию являются интерактивными. NuGet.exe содержит переключатель, чтобы сделать его не интерактивным. Кроме того, подключаемые модули NuGet.exe и Visual Studio запрашивают у пользователя ввод. В dotnet.exe нет запроса, и по умолчанию режим работы не является интерактивным.

Механизм проверки подлинности в dotnet.exe — это поток устройств. При интерактивном выполнении операции восстановления или добавления пакета в командной строке будут предоставлены блоки операций и инструкции пользователю, как выполнить проверку подлинности. После завершения проверки подлинности пользователь продолжит операцию.

Чтобы сделать операцию интерактивной, следует передать --interactive. В настоящее время только явные dotnet restoredotnet add package команды поддерживают интерактивный коммутатор. На dotnet build и dotnet publish отсутствует интерактивный переключатель.

Проверка подлинности в MSBuild

Как и dotnet.exe, MSBuild.exe по умолчанию не поддерживает интерактивный режим, механизм проверки подлинности MSBuild.exe является потоком устройства. Чтобы разрешить восстановлению приостановиться и ждать проверки подлинности, вызовите восстановление с помощью msbuild -t:restore -p:NuGetInteractive="true".

Создание межплатформенного плагина для проверки подлинности

Пример реализации можно найти в плагине Microsoft Credential Provider.

Очень важно, чтобы подключаемые модули соответствовали требованиям безопасности, установленным клиентскими средствами NuGet. Минимальная требуемая версия для плагина, чтобы он был плагином аутентификации, — 2.0.0. NuGet выполнит рукопожатие с подключаемым модулем и запросит поддерживаемые утверждения операций. Дополнительные сведения об определенных сообщениях см. в подключаемом модуле NuGet сообщениях протокола.

NuGet установит уровень логирования и предоставит сведения о прокси-сервере подключаемому модулю, когда это применимо. Логгирование в консоли NuGet допустимо только после того, как NuGet установит уровень логирования для плагина.

  • Поведение проверки подлинности плагина .NET Framework

В .NET Framework подключаемые модули могут запрашивать у пользователя ввод, представляя его в виде диалогового окна.

  • Поведение проверки подлинности плагина .NET Core

В .NET Core не удается показать диалоговое окно. Подключаемые модули должны использовать поток устройств для проверки подлинности. Плагин может отправлять журнальные сообщения в NuGet с инструкциями для пользователя. Обратите внимание, что логирование доступно после установки уровня журнала для плагина. NuGet не будет принимать интерактивные входные данные из командной строки.

Когда клиент вызывает подключаемый модуль с учетными данными проверки подлинности, подключаемые модули должны соответствовать переключателю интерактивности и уважать переключатель диалога.

В следующей таблице приведены сведения о том, как должен вести себя подключаемый модуль для всех сочетаний.

IsNonInteractive CanShowDialog Поведение подключаемого модуля
true true Переключение IsNonInteractive имеет приоритет над переключателем диалога. Плагину не разрешено блокировать.
true false Переключение IsNonInteractive имеет приоритет над переключателем диалога. Плагину не разрешено блокировать.
false true Подключаемый модуль может отображать диалоговое окно при необходимости. Например, интерактивный вход или выбор учетной записи.
false false Подключаемый модуль не должен/не может отображать диалоговое окно. Подключаемый модуль должен использовать поток устройства для аутентификации, записывая сообщение с инструкцией через логгер.

До NuGet 7.0 NuGet всегда будет устанавливать CanShowDialog значение false в интерфейсе командной строки dotnet и значение true для восстановления MSBuild. Начиная с версии 7.0, NuGet всегда будет устанавливать CanShowDialog в значение true, но подключаемые модули по-прежнему должны определять, когда графические интерфейсы недоступны. Например, при запуске на Linux через SSH-подключение без переадресации X или в удаленном сеансе PowerShell.

Прежде чем писать плагин, обратитесь к следующим техническим параметрам.