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


Использование пакетов из аутентифицированных веб-каналов

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

Замечание

Используйте источники пакетов, которыми вы доверяете.

Для http-каналов NuGet выполнит запрос без проверки подлинности, и если сервер отвечает на ответ HTTP 401, NuGet будет искать учетные данные в следующем порядке:

  1. Переменная NuGetPackageSourceCredentials_{name}среды.
  2. Учетные данные в файлахnuget.config.
  3. Используйте поставщик учетных данных NuGet, если источник пакета предоставляет такой.

Учетные данные, необходимые для использования, определяются источником пакета. Таким образом, если вы не используете провайдер учетных данных, уточните у источника пакета, какие учетные данные следует использовать. Часто источники пакетов запрещают использовать пароль, который вы используете для входа на веб-сайт, вместе с NuGet. Обычно необходимо создать личный маркер доступа для использования в качестве пароля NuGet, но необходимо проверить документацию на используемом сервере NuGet. Некоторые источники пакетов, такие как Azure DevOps и GitHub, имеют маркеры доступа с областью действия, поэтому может потребоваться убедиться, что все создаваемые маркеры включают требуемую область.

Рекомендации по обеспечению безопасности для управления учетными данными

Хотя NuGet ищет учетные данные в указанном выше порядке, рекомендуется использовать следующую последовательность для безопасного управления учетными данными при проверке подлинности с помощью частных веб-каналов:

  1. Поставщик учетных данных. По возможности рекомендуется использовать поставщик учетных данных. Этот подход позволяет избежать хранения секретов в виде открытого текста и минимизировать риск их случайной утечки через системы контроля версий. Кроме того, обычно это уменьшает количество мест, которые необходимо обновить при истечении срока действия учетных данных или изменениях. Если поставщик учетных данных поддерживает единый вход, он может уменьшить частоту входа или количество мест, в которых необходимо сохранить учетные данные. Дополнительные сведения см. в разделе поставщиков учетных данных .

  2. Зашифрованные учетные данные в nuget.config. Если поставщик учетных данных недоступен, следует использовать зашифрованные учетные данные. Этот подход обеспечивает дополнительный уровень безопасности, сохраняя учетные данные в зашифрованном формате. Дополнительные сведения см. в разделе об учетных данных в файлахnuget.config.

    Замечание

    Помните, что зашифрованные пароли поддерживаются только в Windows. Кроме того, их можно расшифровать только на том же компьютере и тем же пользователем, который первоначально зашифровал их.

  3. Использование макросов переменной среды в nuget.config. Если использование зашифрованных учетных данных невозможно, рассмотрите возможность хранения учетных данных в файле nuget.config с макросами переменных среды. Этот подход позволяет ссылаться на переменные среды, содержащие фактические учетные данные. Он повышает прозрачность и помогает конечным пользователям понять, как настроены их учетные данные. Дополнительные сведения см. в разделе об учетных данных в файлахnuget.config.

  4. Использование переменных среды напрямую. В качестве резервного варианта можно хранить учетные данные непосредственно в переменных среды. Однако помните, что этот подход может обеспечить меньшую видимость и контроль по сравнению с использованием макросов переменных среды в файле nuget.config . Дополнительные сведения см. в разделе об учетных данных в переменных среды.

  5. Очистить текстовые учетные данные в NuGet.Config. Настоятельно рекомендуется использовать один из описанных ранее вариантов. Если эти параметры недоступны, можно сохранить учетные данные в файлеnuget.config . Однако этот параметр следует использовать только в средах, где другой безопасный параметр недоступен. Дополнительные сведения см. в разделе об учетных данных в файлахnuget.config.

    Предупреждение

    Хранение учетных данных в открытом виде в файлеnuget.config , особенно при сохранении файла в системе управления версиями, представляет риск, так как это повышает вероятность непреднамеренной утечки данных аутентификации. Если вы должны хранить учетные данные в файлеnuget.config , рассмотрите возможность использования одного из более безопасных вариантов, упомянутых выше.

Придерживаясь этих рекомендаций, вы можете безопасно аутентифицировать частные фиды, снизив риск утечки конфиденциальной информации.

Учетные данные в переменных среды

NuGet будет искать переменную среды с именем NuGetPackageSourceCredentials_{name}, где {name} является значением key="name" в исходном файле пакета nuget.config. Значение переменной среды должно быть Username={username};Password={password}, и может необязательно включать ;ValidAuthenticationTypes={types}. Если переменная среды не соответствует соглашению NuGet или значение не соответствует ожидаемому шаблону NuGet, NuGet будет автоматически игнорировать переменную среды и продолжать поиск учетных данных для источника пакета в другом месте. Нет журналов для сигнала о том, что NuGet использует учетные данные из переменной среды, что может вызвать трудности при отладке проблем проверки подлинности, если переменная среды содержит истекший секрет, и новый секрет добавляется в файл nuget.config , так как файл конфигурации имеет более низкий приоритет.

Подсказка

Использование переменных среды в конвейерах CI/CD является отличным выбором, чтобы свести к минимуму риск разглашения секретов в журналах.

Например, рассмотрим следующий файлnuget.config :

<configuration>
  <packageSources>
    <clear />
    <add key="Contoso" value="https://nuget.contoso.com/v3/index.json" />
  </packageSources>
</configuration>

В этом случае исходное имя — Contoso и NuGet будет искать имя NuGetPackageSourceCredentials_Contosoпеременной среды. Некоторые платформы чувствительны к регистру, поэтому необходимо использовать правильные символы прописных и строчных букв для имени среды и имени источника, как определено в файле nuget.config .

Если имя пользователя nugetUser и пароль secret123, значение переменной среды должно быть установлено на Username=nugetUser;Password=secret123. Если NuGet должен использовать только эти учетные данные для проверки подлинности HTTP Basic, но не для других схем проверки подлинности, можно задать для переменной среды значение Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basic. Дополнительные сведения о допустимых типах проверки подлинности см. в документации по учетным данным пакета в файлахnuget.config.

Замечание

Переменные среды имеют ограничения на допустимые символы, а разные операционные системы могут иметь разные ограничения. Например, пробелы не допускаются. Поэтому эта переменная среды используется для указания учетных данных NuGet для источников пакетов, использующих недопустимые символы для переменных среды платформы. В таких случаях следует переименовать источник пакета в файлеnuget.config .

Учетные данные в файлах nuget.config

nuget.config файлы могут содержать учетные данные источника пакета. См. раздел документации по файлу nuget.config об учетных данных источника пакета, включая синтаксис, для получения дополнительной информации. Тем не менее, проще использовать dotnet nuget update source в командной строке, чтобы задать учетные данные.

Предупреждение

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

Так как NuGet накапливает параметры из нескольких файлов, рекомендуется сохранить учетные данные в файле nuget.config пользователя. Мы также рекомендуем сохранять источники пакетов в файле nuget.config решения (репозитория исходного кода), включая элемент <clear />, чтобы обеспечить надежность сборки.

Имя пользователя и пароль обычного текста в файле nuget.config может использовать переменную среды, добавив % в начало и конец имени переменной среды, которую вы хотите использовать. Дополнительные сведения см. в справочной документации по использованию переменных среды nuget.config.

Поставщики учетных данных

NuGet имеет модель расширяемости, что позволяет подключаемым модулям предоставлять учетные данные NuGet. Путь, по которому должны устанавливаться поставщики учетных данных, чтобы NuGet мог их обнаружить, отличается в случае .NET Framework (NuGet.exe, MSBuild и Visual Studio) и SDK для .NET, работающего в среде выполнения .NET 5+.

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

Инструмент По умолчанию Выключатель
dotnet Интерфейс командной строки (CLI) неинтерактивный --interactive аргумент. Например: dotnet restore --interactive.
MSBuild неинтерактивный NuGetInteractive Свойство MSBuild. Например: msbuild -t:restore -p:NuGetInteractive=true.
NuGet.exe интерактивный -NonInteractive аргумент. Например: nuget.exe restore -NonInteractive.
Visual Studio интерактивный невозможно запустить в неинтерактивном режиме.

NuGet.exe поддерживает поставщики учетных данных версии 1 и версии 2, а MSBuild и пакет SDK для .NET поддерживают только кроссплатформенные подключаемые модули (V2).

В Visual Studio NuGet имеет интерфейс поставщика учетных данных Visual Studio, который поставщики учетных данных могут использовать для предоставления графического интерфейса входа или вызова API Visual Studio при необходимости. NuGet в Visual Studio будет использовать поставщиков учетных данных командной строки, если не удается найти поставщика учетных данных Visual Studio, который обрабатывает данный источник.

Visual Studio 2017 версии 15.9 и выше включает поставщик учетных данных для Azure Artifacts, который работает в Visual Studio, MSBuild и NuGet.exe. Однако поставщик учетных данных для пакета SDK для .NET не включен в Visual Studio, поэтому его необходимо установить отдельно для работы с ИНТЕРФЕЙСом командной dotnet строки.

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

Ниже приведен список поставщиков учетных данных, о которых мы знаем: