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


Проверка подлинности поставщиков учетных данных nuget.exe в веб-каналах

В службе поддержки версий добавлены nuget.exe определенные поставщики учетных данных 3.3 (версии 1). С тех пор добавлена поддержка версий 4.8 для поставщиков учетных данных версии 2, которые работают во всех сценариях командной строки (nuget.exe, dotnet.exe, ). msbuild.exe

Дополнительные сведения о всех подходах к проверке подлинности см. в разделе "Использование пакетов" из проверенных веб-каналов.

Обнаружение поставщика учетных данных nuget.exe

Поставщиков учетных данных nuget.exe можно использовать тремя способами.

  • Глобально. Чтобы сделать поставщика учетных данных доступным всем экземплярам nuget.exe, запускаемым с использованием профиля текущего пользователя, добавьте его в папку %LocalAppData%\NuGet\CredentialProviders. Возможно, потребуется создать папку CredentialProviders. Поставщики учетных CredentialProviders данных можно установить в корне папки или в вложенной папке. Если поставщик учетных данных имеет несколько файлов или сборок, можно использовать вложенные папки для организации поставщиков.

  • Из переменной среды: поставщики учетных данных могут храниться в любом месте и получать доступ к nuget.exe ней, установив %NUGET_CREDENTIALPROVIDERS_PATH% переменную среды в расположение поставщика. Эта переменная может быть списком, разделенным точкой с запятой (например, path1;path2), если имеется несколько расположений.

  • Вместе с nuget.exe. Поставщиков учетных данных можно поместить в одну папку с nuget.exe.

При загрузке поставщиков учетных данных nuget.exe выполняет поиск всех файлов с именем credentialprovider*.exe в указанных выше расположениях, а затем загружает эти файлы в том порядке, в котором они найдены. Если в одной папке есть несколько поставщиков учетных данных, они загружаются в алфавитном порядке.

Создание поставщика учетных данных nuget.exe

Поставщик учетных данных — это исполняемый файл командной строки с именем в формате CredentialProvider*.exe, который собирает входные данные, получает учетные данные и возвращает соответствующий код состояния выхода и стандартные выходные данные.

Поставщик должен выполнять следующие действия.

  • Определять, может ли он предоставлять учетные данные для целевого URI перед получением учетных данных. В противном случае возвращается код состояния 1 без учетных данных.
  • Не изменять NuGet.Config (например, записывая туда учетные данные).
  • Самостоятельно обрабатывать конфигурацию HTTP-прокси, так как NuGet не предоставляет подключаемому модулю сведения о прокси-сервере.
  • Возвращать учетные данные или сведения об ошибке в nuget.exe, записав объект ответа JSON (см. ниже) в stdout с использованием кодировки UTF-8.
  • При необходимости выдавать дополнительную запись журнала трассировки в stderr. Никакие конфиденциальные данные не должны записываться в stderr, так как при уровне детализации "нормальная" или "детально" NuGet выводит эти трассировки в консоль.
  • Непредусмотренные параметры должны игнорироваться, обеспечивая прямую совместимость с будущими версиями NuGet.

Входные параметры

Параметр или переключатель Description
URI {значение} URI источника пакета, которому требуются учетные данные.
NonInteractive При указании поставщик не выдает интерактивных запросов.
IsRetry При наличии указывает, что эта попытка является повторной после ранее неудачной попытки. Поставщики обычно используют этот флаг, чтобы убедиться, что они обходят весь существующий кэш и запрашивают новые учетные данные, если это возможно.
Verbosity {значение} При указании используется одно из следующих значений: "normal" (обычный), "quiet" (тихий) или "detailed" (подробный). Если значение не указано, по умолчанию используется "normal". Поставщики должны использовать это как показатель уровня дополнительного журналирования, выдаваемого в стандартный поток ошибок.

Коды выхода

Код Результат Description
0 Удачное завершение Учетные данные успешно получены и записаны в stdout.
1 ProviderNotApplicable Текущий поставщик не предоставляет учетные данные для данного URI.
2 Сбой Поставщик является верным поставщиком для данного URI, но не может предоставить учетные данные. В этом случае nuget.exe не будет повторять проверку подлинности и завершится с ошибкой. Типичный пример — ситуация, когда пользователь отменяет интерактивный вход в систему.

Стандартные выходные данные

Свойство Примечания.
Username Имя пользователя для запросов, прошедших проверку подлинности.
Пароль Пароль для запросов, прошедших проверку подлинности.
Сообщение Дополнительные сведения об ответе. Используются только для отображения дополнительных сведений в случае сбоя.

Пример stdout:

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

Устранение неполадок с поставщиком учетных данных

В настоящее время NuGet не предоставляет значительной поддержки для отладки пользовательских поставщиков учетных данных. Работа по в этом направлении отслеживается в проблеме 4598.

Можно также выполнить следующее:

  • Запустите файл nuget.exe с параметром -verbosity, чтобы просмотреть подробные выходные данные.

  • Добавьте в соответствующих местах вывод отладочных сообщений в stdout.

  • Убедитесь, что используется nuget.exe 3.3 или более поздней версии.

  • Присоедините отладчик при запуске с помощью следующего фрагмента кода.

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