25

NuGet 1.5 状态的发行说明

NuGet now supports connecting to private repositories that require basic 
or NTLM authentication.

但是,其中包含的链接只是指向托管您自己的 nuget 提要页面,而没有进一步提及如何设置身份验证。

我想设置一个可以通过 https 从 Internet 访问的 NuGet 服务器,但只允许能够成功进行身份验证的人查看或下载服务器上的包。

我确实创建了一个没有身份验证的应用程序,如文档中的“创建远程源”部分所述,它在 Intranet 上运行良好。我需要做什么才能在这个 repo 上启用身份验证?

另一个要求是解决方案不应花费数百美元(前两个答案推广可能解决问题但成本很高的产品)。

4

2 回答 2

45

这可以通过在网站上启用 Windows 身份验证并通过Sources命令行选项在构建服务器上添加凭据来完成,默认情况下,凭据使用仅限于当前计算机上当前用户的 DPAPI 密钥存储(因此,对于构建服务器,您需要在服务帐户下登录时添加凭据。)

对于开发人员工作站,您只需在 NuGet 包管理器中添加提要,然后在刷新提要时输入/存储凭据(应该会提示您。)

第 1 步 - 要求在 NuGet 服务器上进行身份验证(IIS 配置)

您需要确保为 IIS 安装了您希望使用的身份验证模块,对于 NTLM 身份验证,您将需要 Windows 身份验证模块。安装后,您可以打开 IIS 管理器并深入了解您的网站,打开身份验证设置并启用 Windows 身份验证,确保禁用您不想支持的任何身份验证模块(例如匿名、基本等)

要确保使用用户凭据,请右键单击站点并选择“高级设置”,然后单击“物理路径凭据”按钮。在对话框中确保选择了“应用程序用户(直通身份验证)”。

可以在 TechNet上找到有关 Windows 身份验证的标准 IIS 配置的更多详细信息,包括从命令行配置和启用协商(如果这是您的目标)。

第 2 步 - 将源添加到 NuGet 配置(构建服务器、发布者)

nuget.exe sources add -Name "Fabrikam Feed" -Source "https://nuget.fabrikam.com:443/nuget/"
nuget.exe sources add -Name "Fabirkam Publish" -Source "https://nuget.fabirkam.com:443/"

这里我们添加了两个条目,一个将用作正常的、经过身份验证的 Feed URL(用于从服务器获取包。)第二个将用于发布到服务器(添加或更新 nupkg 文件。)

第 3 步 - 更新添加源的凭据(构建服务器、发布者)

nuget.exe sources update -Name "Fabrikam Feed" -Source "https://nuget.fabrikam.com:443/nuget/" -UserName "Developer" -Password "g0d"
nuget.exe sources update -Name "Fabrikam Publish" -Source "https://nuget.fabrikam.com:443/" -UserName "Developer" -Password "g0d"

在这里,我们已将凭据添加到配置中,如果您查看,%APPDATA%\NuGet\NuGet.config您应该会看到您添加的提要以及加密的凭据。

如果您无法以服务器身份登录,则可以使用该StorePasswordInClearText选项以明文形式存储凭据,但不建议在共享环境中这样做。

第 4 步 - (可选)禁用 Visual Studio 中的发布 URL(开发人员)

打开 Visual Studio 并导航到 NuGet 包管理器设置对话框,取消选中“Fabrikam Publish”提要。这不会影响您发布的能力,但是,如果您不禁用此提要,您将在尝试刷新“所有”源的包时收到错误消息(因为它是发布 URL,而不是提要 URL。)

第 5 步 - (可选)在 Visual Studio 中存储 Windows 凭据(开发人员)

打开 Visual Studio 并导航到 NuGet 包管理器,单击“Fabrikam Feed”。应提示您输入凭据。您可以在此处输入凭据并勾选保存/记住选项。这可确保尝试在 Visual Studio 中刷新提要不会不断要求提供凭据。在 NuGet 包管理器的最新版本中,提要是使用标准 HTTP 请求获取的,并且不使用您存储到 nuget.config 的凭据。

笔记:

  1. 您不需要第三方解决方案来托管私有、安全的订阅源。NuGet 服务器免费提供,并且 IIS 和 NuGet 工具都支持 NTLM/AD/Windows 安全性。

  2. 不需要发布到提要的开发人员不需要在他们的配置中存储凭据。他们也不需要配置“发布”提要。这仅对构建服务器或其他发布者是必需的(重新:步骤 2 和 3。)

  3. 所有将使用包提要的开发人员都会对第 5 步感兴趣,这应该是大多数开发人员所需的全部内容。他们可以简单地从 Visual Studio 中添加提要,然后在出现提示时输入他们的凭据。

  4. 如果凭据更改,您可以导航到开始 -> 管理 Windows 凭据并删除“VSCredentials_nuget.fabrikam.com”。

  5. 第 2 步可以在 Visual Studio 中执行,但为了清楚起见,我在这里给出了命令行。但是,第 3 步必须通过命令行(或使用 NuGet API)执行。

  6. 在 NuGet 的未来版本中,有传言称凭证信息可以存储在解决方案或项目级别(细节尚不清楚),这可能只对无法访问构建服务器的多租户构建环境中的人感兴趣.

希望这对其他人有帮助!

于 2013-12-18T12:49:30.480 回答
2

我实际选择的解决方案是使用 TeamCity 作为 NuGet 服务器;虽然设置起来有点麻烦,因为它缺少 nuget 推送功能,但它现在可以很好地工作,并且无需额外费用即可仅为经过身份验证的用户提供 NuGet 包。

于 2013-07-30T14:56:16.987 回答