Authentifizierung von Feeds in Visual Studio mit NuGet-Credential-Providern
Die NuGet Visual Studio Extension 3.6+ unterstützt Anmeldeinformationsanbieter, die es NuGet ermöglichen, mit authentifizierten Feeds zu arbeiten. Nachdem Sie einen NuGet-Anmeldeinformationsanbieter für Visual Studio installiert haben, wird die NuGet Visual Studio-Erweiterung automatisch bei Bedarf Anmeldeinformationen für authentifizierte Feeds abrufen und aktualisieren.
Eine Beispielimplementierung finden Sie in dem VsCredentialProvider-Beispiel.
In Visual Studio verwendet NuGet eine interne VsCredentialProviderImporter
, die auch nach Plug-In-Anmeldeinformationsanbietern sucht. Diese Plug-In-Anmeldeinformationsanbieter müssen als MEF-Export vom Typ IVsCredentialProvider
auffindbar sein.
Ab 4.8+ NuGet in Visual Studio werden auch die neuen plattformübergreifenden Authentifizierungs-Plug-Ins unterstützt, aber sie sind aus Leistungsgründen nicht der empfohlene Ansatz.
Anmerkung
NuGet-Anbieter für Anmeldeinformationen für Visual Studio müssen als normale Visual Studio-Erweiterung installiert werden und erfordern Visual Studio 2017 oder höher.
NuGet-Anmeldeinformationsanbieter für Visual Studio funktionieren nur in Visual Studio (nicht in dotnet restore oder nuget.exe). Informationen zu Anmeldeinformationen-Anbietern mit nuget.exefinden Sie unter nuget.exe Anmeldeinformationen-Anbieter. Informationen zu Anmeldeinformationsanbietern in dotnet und msbuild finden Sie unter NuGet-Plug-ins für plattformübergreifende Anwendungen
Erstellen eines NuGet-Zugangsanbieters für Visual Studio
Die NuGet Visual Studio Extension 3.6+ implementiert einen internen CredentialService, der zum Abrufen von Anmeldeinformationen verwendet wird. Der CredentialService verfügt über eine Liste integrierter und Plug-In-Anbieter von Anmeldeinformationen. Jeder Anbieter wird sequenziell versucht, bis Anmeldeinformationen abgerufen werden.
Während der Erfassung von Anmeldeinformationen versucht der Anmeldeinformationsdienst, Anmeldeinformationsanbieter in der folgenden Reihenfolge anzusprechen und stoppt, sobald Anmeldeinformationen erfolgreich abgerufen werden.
- Anmeldeinformationen werden aus NuGet-Konfigurationsdateien (mithilfe der integrierten
SettingsCredentialProvider
) abgerufen. - Visual Studio-Anmeldeanbieter werden nacheinander versucht.
- Versuchen Sie, alle plattformübergreifenden NuGet-Anmeldeinformationsanbieter sequenziell zu verwenden.
- Wenn noch keine Anmeldeinformationen abgerufen wurden, wird der Benutzer mithilfe eines Standarddialogfelds für die Standardauthentifizierung zur Eingabe von Anmeldeinformationen aufgefordert.
Implementieren von IVsCredentialProvider.GetCredentialsAsync
Um einen NuGet-Anmeldeinformationsanbieter für Visual Studio zu erstellen, erstellen Sie eine Visual Studio-Erweiterung, die einen öffentlichen MEF-Export verfügbar macht, der den IVsCredentialProvider
Typ implementiert, und entspricht den unten beschriebenen Prinzipien.
public interface IVsCredentialProvider
{
Task<ICredentials> GetCredentialsAsync(
Uri uri,
IWebProxy proxy,
bool isProxyRequest,
bool isRetry,
bool nonInteractive,
CancellationToken cancellationToken);
}
Eine Beispielimplementierung finden Sie in dem VsCredentialProvider-Beispiel.
Jeder NuGet-Anmeldeinformationsanbieter für Visual Studio muss:
- Bestimmen Sie, ob Anmeldeinformationen für den angezielten URI bereitgestellt werden können, bevor Sie den Erwerb von Anmeldeinformationen starten. Wenn der Anbieter keine Anmeldeinformationen für die Zielquelle angeben kann, sollte er
null
zurückgeben. - Wenn der Anbieter Anforderungen für den angepeilten URI verarbeitet, aber keine Zugangsdaten angeben kann, sollte eine Ausnahme ausgelöst werden.
Ein benutzerdefinierter NuGet-Anmeldeinformationsanbieter für Visual Studio muss die IVsCredentialProvider
Schnittstelle implementieren, die im NuGet.VisualStudio-Paketverfügbar ist.
GetCredentialAsync
Eingabeparameter | Beschreibung |
---|---|
URI-URI | Der URI der Paketquelle, für den Anmeldedaten angefordert werden. |
IWebProxy-Proxy | Webproxy, der beim Kommunizieren im Netzwerk verwendet werden soll. Null, wenn keine Proxyauthentifizierung konfiguriert ist. |
bool isProxyRequest | True, wenn diese Anfrage darauf abzielt, Proxyauthentifizierungsdaten zu erhalten. Wenn die Implementierung nicht gültig für den Erwerb von Proxy-Anmeldeinformationen ist, sollte null zurückgegeben werden. |
bool isRetry | Wahr, wenn Anmeldeinformationen zuvor für diesen URI angefordert wurden, aber die angegebenen Anmeldeinformationen keinen autorisierten Zugriff ermöglicht haben. |
bool nichtInteraktiv | Wenn true, muss der Anmeldeinformationsanbieter alle Benutzeraufforderungen unterdrücken und stattdessen Standardwerte verwenden. |
CancellationToken cancellationToken | Dieses Abbruchtoken sollte überprüft werden, um festzustellen, ob der Vorgang, der Anmeldeinformationen anfordert, abgebrochen wurde. |
Rückgabewert: Ein Anmeldeinformationsobjekt, das die System.Net.ICredentials
Schnittstelleimplementiert.