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ń:
- Poświadczenia zostaną pobrane z plików konfiguracji NuGet (przy użyciu wbudowanego
SettingsCredentialProvider
elementu ). - Jeśli źródło pakietu znajduje się w usłudze Visual Studio Team Services,
VisualStudioAccountProvider
zostanie użyte. - Wszyscy inni dostawcy poświadczeń programu Visual Studio zostaną wypróbowani sekwencyjnie.
- Spróbuj użyć wszystkich dostawców poświadczeń międzyplatformowych NuGet sekwencyjnie.
- 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:
- 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
. - 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.