访问 Nuget 提要时如何传递凭据

How to pass credentials when accessing a Nuget feed

我正在尝试从 Nuget 存储库下载包,该存储库需要凭据才能使用 NuGet.Core 进行访问。

我知道可以按如下方式访问没有身份验证的 Nuget 存储库:

//ID of the package to be looked up
string packageID = "EntityFramework";

//Connect to the official package repository
IPackageRepository repo = PackageRepositoryFactory.Default.CreateRepository("https://packages.nuget.org/api/v2");

//Initialize the package manager
string path = <PATH_TO_WHERE_THE_PACKAGES_SHOULD_BE_INSTALLED>
PackageManager packageManager = new PackageManager(repo, path);

//Download and unzip the package
packageManager.InstallPackage(packageID, SemanticVersion.Parse("5.0.0"));

(来源:Nuget blog

现在假设我拥有 Nuget 存储库的凭据。 我尝试使用 http 客户端和网络凭据获取程序包,但没有成功。 那么如何将凭据传递到 Nuget 服务器?

我还想知道如何 restrict access to a Nuget feed(新版本提供什么?)。

我似乎找不到任何明确的文档。

谢谢。

我假设您使用的是 NuGet 2.x 而不是 NuGet 3.0。

为了让 NuGet 将凭据发送到服务器,您需要在 NuGet 的 HttpClient 上配置 DefaultCredentialProvider class。

HttpClient.DefaultCredentialProvider = new YourCredentialProvider ();

NuGet 提供了一个 SettingsCredentialProvider class,它将尝试在用户的 NuGet.Config 文件中查找用户名和密码,但您仍然需要实现自己的 ICredentialProvider,因为 SettingsCredentialProvider 需要将其传递给它构造函数。它通常使用此凭据提供程序来提示用户输入凭据。

HttpClient.DefaultCredentialProvider = new SettingsCredentialProvider(new ConsoleCredentialProvider(Console), SourceProvider, Console);

NuGet 提供了您可以使用的 ConsoleCredentialProvider。它还提供了一个控制台和一种创建源提供程序的方法。

要限制对您自己的 NuGet 服务器的访问,您可以使用 NuGet.Server NuGet 包并创建您自己的 Web 应用程序。然后您可以在 IIS 上托管它并使用标准的 IIS 身份验证功能。

另一种方法是使用第三方托管服务,例如 MyGet,它允许您设置需要身份验证的私人供稿。