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


Проверка подлинности веб-каналов в Visual Studio с помощью поставщиков учетных данных NuGet

Расширение NuGet Visual Studio 3.6+ поддерживает поставщики учетных данных, которые позволяют NuGet работать с проверенными веб-каналами. После установки поставщика учетных данных NuGet для Visual Studio расширение NuGet Visual Studio автоматически получает и обновляет учетные данные для проверенных веб-каналов по мере необходимости.

Пример реализации можно найти в примере VsCredentialProvider.

В Visual Studio NuGet использует внутренний VsCredentialProviderImporter сервер, который также проверяет наличие поставщиков учетных данных подключаемого модуля. Эти поставщики учетных данных подключаемого модуля должны быть обнаружены как экспорт MEF типа IVsCredentialProvider.

Начиная с версии 4.8+ NuGet в Visual Studio также поддерживает новые подключаемые модули межплатформенной проверки подлинности, но они не являются рекомендуемыми способами по соображениям производительности.

Примечание.

Поставщики учетных данных NuGet для Visual Studio должны быть установлены как обычное расширение Visual Studio и требуют visual Studio 2017 или более поздней версии.

Поставщики учетных данных NuGet для Visual Studio работают только в Visual Studio (не в dotnet restore или nuget.exe). Поставщики учетных данных с nuget.exe см. в разделе nuget.exe Поставщики учетных данных. Поставщики учетных данных в dotnet и msbuild см. в разделе подключаемых модулей NuGet для кроссплатформенных модулей

Создание поставщика учетных данных NuGet для Visual Studio

Расширение NuGet Visual Studio 3.6+ реализует внутреннюю службу credentialService, которая используется для получения учетных данных. CredentialService содержит список встроенных и подключаемых поставщиков учетных данных. Каждый поставщик выполняется последовательно до получения учетных данных.

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

  1. Учетные данные будут получены из файлов конфигурации NuGet (с помощью встроенного SettingsCredentialProvider).
  2. Если источник пакета находится в Visual Studio Team Services, VisualStudioAccountProvider будет использоваться.
  3. Все остальные поставщики учетных данных Visual Studio подключаемого модуля будут последовательно проверены.
  4. Попробуйте использовать все поставщики кроссплатформенных учетных данных NuGet последовательно.
  5. Если учетные данные еще не получены, пользователю будет предложено получить учетные данные с помощью стандартного диалогового окна проверки подлинности уровня "Базовый".

Реализация IVsCredentialProvider.GetCredentialsAsync

Чтобы создать поставщик учетных данных NuGet для Visual Studio, создайте расширение Visual Studio, которое предоставляет общедоступный экспорт MEF, реализующий IVsCredentialProvider тип, и соответствует принципам, описанным ниже.

public interface IVsCredentialProvider
{
    Task<ICredentials> GetCredentialsAsync(
        Uri uri,
        IWebProxy proxy,
        bool isProxyRequest,
        bool isRetry,
        bool nonInteractive,
        CancellationToken cancellationToken);
}

Пример реализации можно найти в примере VsCredentialProvider.

Каждый поставщик учетных данных NuGet для Visual Studio должен:

  1. Определять, может ли он предоставлять учетные данные для целевого URI перед получением учетных данных. Если поставщик не может предоставить учетные данные для целевого источника, он должен вернуться null.
  2. Если поставщик обрабатывает запросы к целевому URI, но не может предоставить учетные данные, следует вызвать исключение.

Настраиваемый поставщик учетных данных NuGet для Visual Studio должен реализовать IVsCredentialProvider интерфейс, доступный в пакете NuGet.VisualStudio.

GetCredentialAsync

Входной параметр Description
Универсальный код ресурса (URI) Uri источника пакета, для которого запрашиваются учетные данные.
Прокси-сервер IWebProxy Веб-прокси, используемый при обмене данными в сети. Значение NULL, если проверка подлинности прокси-сервера не настроена.
bool isProxyRequest Значение true, если этот запрос предназначен для получения учетных данных проверки подлинности прокси-сервера. Если реализация недопустима для получения учетных данных прокси-сервера, возвращается значение NULL.
bool isRetry Значение True, если учетные данные были запрошены ранее для этого URI, но предоставленные учетные данные не разрешали авторизованный доступ.
bool nonInteractive Если значение true, поставщик учетных данных должен подавлять все запросы пользователей и использовать значения по умолчанию.
ОтменаToken cancellationTokenToken Этот маркер отмены должен быть проверка, чтобы определить, была ли отменена операция, запрашивающая учетные данные.

Возвращаемое значение: объект учетных данных, реализующий System.Net.ICredentials интерфейс.