这可以通过在 Web 站点上启用 Windows 身份验证并通过
Sources 命令行选项在构建服务器上添加凭据来完成,默认情况下,凭据使用 DPAPI 密钥存储,该密钥受限于当前用户在当前计算机上(因此,对于构建服务器,您需要在服务帐户下登录时添加凭据。)
对于开发人员的工作站,您只需要在 NuGet 包管理器中添加源,然后在刷新源时输入/存储凭据(应提示您)。
步骤 1 - 在 NuGet 服务器上要求身份验证(IIS 配置)
您需要确保已为 IIS 安装了要使用的身份验证模块,对于 NTLM auth,您将需要 Windows 身份验证模块。安装后,您可以打开 IIS 管理器,展开到您的网站,打开身份验证设置并启用 Windows 身份验证,请务必禁用任何您不想支持的身份验证模块(例如匿名、基本等)。
为确保使用用户凭据,请右键单击站点并选择“高级设置”,然后单击“物理路径凭据”按钮。在对话框中,请确保选择“应用程序用户(穿透身份验证)”。
关于Windows身份验证的标准IIS配置的更详细信息可以在TechNet上找到,其中包括从命令行进行配置和启用Negotiate(如果这是您的目标)。
步骤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文件)。
第三步 - 更新已添加源的凭据(构建服务器、发布者)。
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 中的凭据。
注意事项:
-
您不需要第三方解决方案来托管私有、安全的 feeds。NuGet 服务器是免费提供的,而且 IIS 和 NuGet 工具都支持 NTLM/AD/Windows 安全。
不需要发布到 feed 的开发人员不需要在其配置文件中存储凭据。他们也不需要配置“发布”feed。这只对构建服务器或其他发布者(参见步骤2和3)是必要的。
所有将使用软件包 feed 的开发人员都会对步骤5感兴趣,这应该是大多数开发人员所需的全部内容。他们可以简单地从 Visual Studio 中添加 feed,然后在提示时输入凭据即可。
如果凭据更改,您可以导航到“开始”->“管理 Windows 凭据”,然后删除“VSCredentials_nuget.fabrikam.com”。
步骤2可以在 Visual Studio 中执行,但为了清晰起见,我在此处给出了命令行。但是,步骤3必须通过命令行(或使用 NuGet API)执行。
在未来的 NuGet 版本中,传言凭据信息可以存储在解决方案或项目级别(细节不明确),这可能仅适用于多租户构建环境中无法访问构建服务器的人员。
希望这能帮助其他人!