2015-05-28 52 views
1

我想從Nuget存儲庫下載需要使用NuGet.Core訪問憑據的包。如何在訪問Nuget Feed時傳遞憑據

我知道,沒有認證的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將憑據發送到服務器,您需要在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,它允許您設置需要驗證的私人提要。

+1

感謝您的回答。我發現[另一個答案](http://stackoverflow.com/questions/18594613/setting-the-package-credentials-using-nuget-core-dll)由你更接近我的實際問題。我沒有得到的是我如何將憑證傳遞給GetCredentials()函數。誰調用了這個函數?我可以使用一些幫助來理解代碼的流程。謝謝。 – user2757113

+0

NuGet在獲取需要身份驗證的Web響應後會調用GetCredentials功能,但NuGet無法在服務器接受的NuGet.Config文件(設置提供程序)中找到用戶名/密碼。如果你有一個你想從GetCredentials函數返回的用戶名和密碼,只需用用戶名和密碼創建一個新的System.Net.NetworkCredential然後返回。 –