Uwierzytelnianie źródeł danych w programie Visual Studio przy użyciu dostawców poświadczeń NuGet

Rozszerzenie NuGet Visual Studio Extension 3.6+ obsługuje dostawców poświadczeń, co umożliwia nuGet pracę z uwierzytelnionymi źródłami danych. Po zainstalowaniu dostawcy poświadczeń NuGet dla programu Visual Studio rozszerzenie NuGet programu Visual Studio automatycznie uzyskaje i odświeży poświadczenia dla uwierzytelnionych źródeł danych w razie potrzeby.

Przykładową implementację można znaleźć w przykładzie VsCredentialProvider.

W programie Visual Studio pakiet NuGet używa wewnętrznego VsCredentialProviderImporter modułu, który również skanuje pod kątem dostawców poświadczeń wtyczki. Ci dostawcy poświadczeń wtyczki muszą być odnajdywalni jako eksport MEF typu IVsCredentialProvider.

Począwszy od pakietu NuGet w wersji 4.8 lub nowszej w programie Visual Studio, obsługuje również nowe wtyczki uwierzytelniania międzyplatformowego, ale nie są to zalecane podejście ze względu na wydajność.

Uwaga

Dostawcy poświadczeń NuGet dla programu Visual Studio muszą być zainstalowani jako zwykłe rozszerzenie programu Visual Studio i będą wymagać programu Visual Studio 2017 lub nowszego.

Dostawcy poświadczeń NuGet dla programu Visual Studio działają tylko w programie Visual Studio (a nie w funkcji przywracania dotnet lub nuget.exe). Aby uzyskać informacje o dostawcach poświadczeń z nuget.exe, zobacz nuget.exe Credential Providers (Dostawcy poświadczeń nuget.exe). Aby uzyskać informacje o dostawcach poświadczeń w witrynie dotnet i msbuild, zobacz Dodatki międzyplatformowe NuGet

Tworzenie dostawcy poświadczeń NuGet dla programu Visual Studio

Rozszerzenie NuGet Visual Studio Extension 3.6+ implementuje wewnętrzną usługę CredentialService używaną do uzyskiwania poświadczeń. Usługa CredentialService zawiera listę wbudowanych i wtyczki dostawców poświadczeń. Każdy dostawca jest testowany sekwencyjnie do momentu uzyskania poświadczeń.

Podczas pozyskiwania poświadczeń usługa poświadczeń spróbuje dostawców poświadczeń w następującej kolejności, zatrzymując się natychmiast po uzyskaniu poświadczeń:

  1. Poświadczenia zostaną pobrane z plików konfiguracji NuGet (przy użyciu wbudowanego SettingsCredentialProviderelementu ).
  2. Jeśli źródło pakietu znajduje się w usłudze Visual Studio Team Services, VisualStudioAccountProvider zostanie użyte.
  3. Wszyscy inni dostawcy poświadczeń programu Visual Studio zostaną wypróbowani sekwencyjnie.
  4. Spróbuj użyć wszystkich dostawców poświadczeń międzyplatformowych NuGet sekwencyjnie.
  5. Jeśli poświadczenia nie zostały jeszcze uzyskane, użytkownik będzie monitowany o poświadczenia przy użyciu standardowego okna dialogowego uwierzytelniania podstawowego.

Implementowanie interfejsu IVsCredentialProvider.GetCredentialsAsync

Aby utworzyć dostawcę poświadczeń NuGet dla programu Visual Studio, utwórz rozszerzenie programu Visual Studio, które uwidacznia publiczny eksport MEF implementujący IVsCredentialProvider typ i przestrzega zasad opisanych poniżej.

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

Przykładową implementację można znaleźć w przykładzie VsCredentialProvider.

Każdy dostawca poświadczeń NuGet dla programu Visual Studio musi:

  1. Ustal, czy może podać poświadczenia dla docelowego identyfikatora URI przed zainicjowanym pozyskiwaniem poświadczeń. Jeśli dostawca nie może podać poświadczeń dla docelowego źródła, powinien zwrócić wartość null.
  2. Jeśli dostawca obsługuje żądania dla docelowego identyfikatora URI, ale nie może podać poświadczeń, należy zgłosić wyjątek.

Niestandardowy dostawca poświadczeń NuGet dla programu Visual Studio musi zaimplementować IVsCredentialProvider interfejs dostępny w pakiecie NuGet.VisualStudio.

GetCredentialAsync

Parametr wejściowy opis
Identyfikator URI Identyfikator URI źródła pakietu, dla którego są wymagane poświadczenia.
Serwer proxy IWebProxy Internetowy serwer proxy do użycia podczas komunikacji w sieci. Wartość null, jeśli nie skonfigurowano uwierzytelniania serwera proxy.
bool isProxyRequest Prawda, jeśli to żądanie ma uzyskać poświadczenia uwierzytelniania serwera proxy. Jeśli implementacja nie jest prawidłowa do uzyskiwania poświadczeń serwera proxy, powinna zostać zwrócona wartość null.
wartość logiczna isRetry Wartość True, jeśli wcześniej zażądano poświadczeń dla tego identyfikatora URI, ale podane poświadczenia nie zezwalały na autoryzowany dostęp.
bool nonInteractive Jeśli wartość true, dostawca poświadczeń musi pominąć wszystkie monity użytkownika i zamiast tego używać wartości domyślnych.
CancellationToken cancellationToken Ten token anulowania należy sprawdzić, aby określić, czy operacja żądającą poświadczeń została anulowana.

Wartość zwracana: obiekt poświadczeń implementuje System.Net.ICredentials interfejs.