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


Использование пакетов из веб-каналов, прошедших проверку подлинности

Многие операции 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 будет искать переменную среды с именем, где {name} используется значение key="name" в источнике пакета nuget.config.NuGetPackageSourceCredentials_{name} Значение переменной среды должно быть 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, значение переменной среды должно быть заданоUsername=nugetUser;Password=secret123.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, который работает в Visual Studio, MSBuild и NuGet.exe. Однако поставщик учетных данных для пакета SDK для .NET не включен в Visual Studio, поэтому его необходимо установить отдельно для работы с ИНТЕРФЕЙСом командной dotnet строки.

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

Существует запрос на установку поставщиков учетных данных с помощью средств .NET, и это, скорее всего, упрощает обнаружение других поставщиков учетных данных. Пока это не будет реализовано, ниже приведен список поставщиков учетных данных, о которых мы знаем: