我在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
我为push
和list
获得的输出:
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?
答案 0 :(得分:0)
也许您需要将-StorePasswordInClearText
选项添加到nuget.exe sources Add
命令。
答案 1 :(得分:0)
如果使用nuget.exe 3.5.0
和个人访问令牌,我可以重现您的问题。但是,如果您在TFS 2017中使用 nuget.exe 3.4.3 和个人访问令牌,则没有问题。
请直接从Nuget页面获取nuget.exe 3.4.3
,而不是使用nuget.exe 3.5.0
。
答案 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的“提要权限”选项卡中为此用户授予权限。