2015-05-28 3 views
1

Я пытаюсь загрузить пакеты из репозитория Nuget, для которого требуются учетные данные для доступа к нему с помощью NuGet.Core.Как передать учетные данные при доступе к корму Nuget

Я знаю, что 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 (что предлагают более новые версии?).

Кажется, я не могу найти четкую документацию.

Спасибо.

+0

Возможный дубликат [Установка учетных данных пакета с использованием Nuget Core DLL] (https://stackoverflow.com/questions/18594613/setting-the-package-credentials-using-nuget-core-dll) – jgauffin

ответ

1

Я предполагаю, что вы используете NuGet 2.x, а не NuGet 3.0.

Чтобы NuGet мог отправлять учетные данные серверу, вам необходимо настроить DefaultCredentialProvider в классе HttpClient NuGet.

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 и создать собственное веб-приложение. Затем вы можете разместить это в IIS и использовать стандартные функции проверки подлинности IIS.

Альтернативой является использование стороннего хостингового сервиса, такого как MyGet, который позволяет настраивать частные каналы, требующие аутентификации.

+1

Спасибо за ответ , Я нашел [другой ответ] (http://stackoverflow.com/questions/18594613/setting-the-package-credentials-using-nuget-core-dll), который ближе к моей реальной проблеме. Я не получаю, как передать полномочия, которые у меня есть для функции GetCredentials(). Кто называет эту функцию? Я мог бы немного помочь в понимании потока кода. Благодарю. – user2757113

+0

NuGet вызывает функцию GetCredentials после получения ответа веб-ответа, требующего аутентификации, но NuGet не может найти имя пользователя/пароль в файле NuGet.Config (поставщик настроек), который принимается сервером. Если у вас есть имя пользователя и пароль, которые вы хотите вернуть из функции GetCredentials, просто создайте новый System.Net.NetworkCredential с именем пользователя и паролем и верните его. –

Смежные вопросы