访问Nuget Feed

时间:2015-05-28 16:28:01

标签: api authentication nuget nuget-server

我正在尝试从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(新版本提供什么?)。

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

感谢。

1 个答案:

答案 0 :(得分:2)

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

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

HttpClient.DefaultCredentialProvider = new YourCredentialProvider ();

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

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

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

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

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