个人访问令牌不使用TFS 2017包Feed

时间:2017-02-02 11:00:03

标签: tfs nuget tfs2017

我在VM中设置了TFS 2017,创建了一个项目并添加了包源扩展。然后,我创建了一个具有完全访问权限的订阅源和个人访问令牌。

我的问题是我无法使用nuget.exe 3.5.0和个人访问令牌从命令行将包推送到Feed。我正在使用here上的说明和Feed页面(下面的第2个命令)

我的命令:

nuget.exe sources Add -Name MyFeed -Source "http://server2016:8080/tfs/DefaultCollection/_packaging/MyFeed/nuget/v3/index.json" -Username administrator -Password x7m5hochjcf4vabp3zqeekrzi7mtbyk6at5tujdt2ny5fgienlgq
nuget.exe push -Source "MyFeed" -ApiKey VSTS C:\temp\octopack.3.4.6.nupkg
nuget.exe list -Source MyFeed

我为pushlist获得的输出:

Using credentials from config. UserName: administrator
Please provide credentials for: http://server2016:8080/tfs/DefaultCollection/_packaging/MyFeed/nuget/v3/index.json
UserName:

我尝试再次输入用户名和PAT,但它只是再次提示我。

如果我使用我的Windows凭据(与PAT相同的帐户),它可以正常工作。我和Fiddler一起检查过,auth挑战已经发送并回复了。服务器返回401。

知道TFS为什么不接受PAT?

5 个答案:

答案 0 :(得分:0)

也许您需要将-StorePasswordInClearText选项添加到nuget.exe sources Add命令。

答案 1 :(得分:0)

如果使用nuget.exe 3.5.0和个人访问令牌,我可以重现您的问题。但是,如果您在TFS 2017中使用 nuget.exe 3.4.3 和个人访问令牌,则没有问题。

enter image description here

请直接从Nuget页面获取nuget.exe 3.4.3,而不是使用nuget.exe 3.5.0

enter image description here

答案 2 :(得分:0)

如果您可以使用NuGet.exe v4.0.0尝试此方案(rc4目前可在http://nuget.org/downloads获得)并告诉我们您找到的内容,将会很有帮助。

谢谢,Rob Relyea | NuGet客户团队工程经理| http://twitter.com/rrelyea

答案 3 :(得分:0)

从nuget 5.0开始,您有权设置“ ValidAuthenticationTypes”。参见nuget sources -?

 -ValidAuthenticationTypes             Comma-separated list of valid authentication types for this source. By default,
                                       all authentication types are valid. Example: basic,negotiate

这将控制nuget.config中的新密钥

<add key="ValidAuthenticationTypes" value="basic" />

这可以阻止nuget对您的本地TFS / AzureDevOps服务器尝试进行协商/ NTLM / Kerberos身份验证。

一些历史

这里的问题通常是谈判阻碍。 Nuget(以及基于“ msbuild / restore”或“ dotnet”之类的基础库构建的工具)擅长使登录时的身份验证变得简单,并且AD可以为您协商NTLM / Kerberos。不幸的是,在配置基本凭据时,它可以尝试在协商过程中传递这些凭据,但失败了。值得注意的是,这仅是本地服务器实例的问题,而不是azure.dev.com/visualstudio.com云托管实例的问题,因为协商不会在云方案中触发。

此问题在credentialProvider插件流中得到了部分解决,该插件流可以为其凭据返回auth类型,并且如果设置了特定的环境变量,则nuget将禁用UseDefaultCredentials并跳过协商(在Azure Pipelines中用于TFS的nuget auth / AzureDevops服务器)。

它在https://github.com/NuGet/NuGet.Client/pull/2297的nuget 5.0中得到了最终修复,当您为基本身份验证手动指定PAT /密码时,它甚至可以在配置文件中设置身份验证类型。到目前为止,nuget文档仍为pending

答案 4 :(得分:0)

如果使用Active Directory,则VSTS代理服务不能与NETWORK_SERVICE帐户一起使用。

首先,您需要为服务设置一个Active Directory帐户。之后,您必须从TFS的“提要权限”选项卡中为此用户授予权限。