Authentifizieren von Feeds in Visual Studio mit NuGet-Anmeldeinformationsanbietern
Die NuGet Visual Studio Extension 3.6+ unterstützt Anmeldeinformationsanbieter, mit denen NuGet mit authentifizierten Feeds arbeiten kann. Nachdem Sie einen NuGet-Anmeldeinformationsanbieter für Visual Studio installiert haben, wird die NuGet Visual Studio-Erweiterung bei Bedarf automatisch Anmeldeinformationen für authentifizierte Feeds abrufen und aktualisieren.
Eine Beispielimplementierung finden Sie im Vs-Anmeldeinformationsanbieter-Beispiel.
In Visual Studio verwendet NuGet ein internes VsCredentialProviderImporter
-Element, das auch nach Plug-in-Anmeldeinformationsanbietern sucht. Diese Plug-in-Anmeldeinformationsanbieter müssen als MEF-Export des Typs 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.
Hinweis
NuGet-Anmeldeinformationsanbieter 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 or nuget.exe). Informationen zu Anmeldeinformationsanbietern mit nuget.exe finden Sie unter nuget.exe Anmeldeinformationsanbieter. Informationen zu Anmeldeinformationsanbietern in dotnet und msbuild finden Sie unter Plattformübergreifende NuGet-Plug-ins
Erstellen eines NuGet-Anmeldeinformationen-Anbieters für Visual Studio
Die NuGet Visual Studio-Erweiterung 3.6+ implementiert einen internen Anmeldedienst (CredentialService), der zum Abrufen von Anmeldeinformationen verwendet wird. Dieser CredentialService verfügt über eine Liste integrierter und Plug-in-Anmeldeinformationsanbieter. Jeder Anbieter wird sequenziell versucht, bis Anmeldeinformationen abgerufen werden können.
Während der Anmeldeinformationserfassung versucht der Anmeldeinformationsdienst Anmeldeinformationsanbieter in der folgenden Reihenfolge abzurufen und stoppt, sobald Anmeldeinformationen abgerufen werden können:
- Anmeldeinformationen werden aus NuGet-Konfigurationsdateien (mithilfe der integrierten
SettingsCredentialProvider
) abgerufen. - Wenn sich die Paketquelle in Visual Studio Team Services befindet, wird
VisualStudioAccountProvider
verwendet. - Alle anderen Anmeldeinformationsanbieter von Visual Studio werden sequenziell ausprobiert.
- 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 zur Implementierung des Typs IVsCredentialProvider
verfügbar macht, und befolgen Sie die 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 im Vs-Anmeldeinformationsanbieter-Beispiel.
NuGet-Anmeldeinformationsanbieter für Visual Studio müssen:
- Ermitteln Sie, ob Sie Anmeldeinformationen für den Ziel-URI vor dem Initiieren des Abrufs der der Anmeldeinformationen bereitstellen können. Wenn der Anbieter keine Anmeldeinformationen für die Zielquelle angeben kann, sollte
null
zurückgegeben werden. - Wenn der Anbieter Anforderungen für den zielbezogenen URI verarbeitet, aber keine Anmeldeinformationen 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-Paket verfügbar ist.
GetCredentialAsync
Eingabeparameter | Beschreibung |
---|---|
Uri uri | Der Paketquell-URI, für den Anmeldeinformationen angefordert werden. |
IWebProxy proxy | Webproxy, der beim Kommunizieren im Netzwerk verwendet werden soll. Null, wenn keine Proxyauthentifizierung konfiguriert ist. |
bool isProxyRequest | True, wenn diese Anforderung das Abrufen von Proxyauthentifizierungsanmeldeinformationen ist. Wenn die Implementierung für den Erwerb von Proxyanmeldeinformationen nicht gültig ist, sollte NULL zurückgegeben werden. |
bool isRetry | True, wenn Anmeldeinformationen zuvor für diesen URI angefordert wurden, aber die angegebenen Anmeldeinformationen keinen autorisierten Zugriff zugelassen haben. |
bool nonInteractive | Wenn true, muss der Anmeldeinformationsanbieter alle Benutzeraufforderungen unterdrücken und stattdessen Standardwerte verwenden. |
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
-Schnittstelle implementiert.