配置NuGet服务器以使用身份验证

时间:2013-07-29 15:32:22

标签: authentication iis nuget ntlm nuget-server

NuGet 1.5状态的release notes

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

但是,其中包含的链接只会导致hosting your own nuget feeds页面,而不再提及如何设置身份验证。

我想设置一个可通过互联网https访问的NuGet服务器,但只允许能够成功通过身份验证的人查看或下载服务器上的软件包。

我确实创建了一个没有身份验证的应用程序,如documentation创建远程提要部分所述,它在Intranet上运行良好。如何在此repo上启用身份验证?

另一个要求是解决方案不应该花费数百美元(前两个答案会促进可能解决问题的产品,但会花费很多)。

3 个答案:

答案 0 :(得分:40)

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

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

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

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

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

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

第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文件。)< / p>

第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,您应该会看到已添加的Feed以及加密的凭据。

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

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

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

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

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

备注:

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

  2. 不需要发布到Feed的开发人员不需要在其配置中存储凭据。他们也不需要配置“发布”Feed。这仅适用于构建服务器或其他发布者(re:步骤2和3。)

  3. 所有使用套餐供稿的开发人员都会对第5步感兴趣,这应该是大多数开发人员所需要的全部内容。他们只需在Visual Studio中添加提要,然后在提示时输入他们的凭据。

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

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

  6. 在NuGet未来发布的谣言中,凭据信息可以存储在解决方案或项目级别(详细信息不清楚),这可能只对多租户构建环境中的人员不感兴趣可以访问构建服务器。

  7. 希望这可以帮助其他人!

答案 1 :(得分:2)

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

答案 2 :(得分:0)

如果您想要真正安全的Feed并将其公开到互联网上,您可能需要查看MyGet.org,您可以在其中创建需要基本身份验证的私人Feed,默认情况下为SSL / HTTPS。

使用您的首选身份提供商(Live Id,Facebook,Google,Stackoverflow,GitHub,OAuth等),甚至您自己的公司,只需点击几下,即可邀请您想要的人加入Feed并分配他们的权限ADFS(企业计划)。

更多信息:https://www.myget.org/plans 有关在visual studio或构建服务器上设置身份验证的帮助,请查看https://docs.myget.orgblog上的文档。如果您需要进一步的帮助,我们很乐意通过我们的联系表单或通过MyGet标记的StackOverflow问题为Twitter提供帮助。