Azure devops VSTS NuGet发布服务器-403(禁止)错误

Azure devops VSTS NuGet发布服务器-403(禁止)错误,azure-devops,azure-pipelines-build-task,azure-artifacts,Azure Devops,Azure Pipelines Build Task,Azure Artifacts,我在Team Services中创建了一个构建定义,该定义需要在专用代理(即内部构建服务器)上运行。此代理正在域帐户下运行。然后,我在TeamServices中创建了一个NuGet提要,试图将NuGet Packager任务创建的包发布到该提要 尝试使用NuGet Publisher任务(NuGet v4.0.0.2283)将包推送到内部提要时,我遇到身份验证错误(403禁止): 请注意,我可以使用我的凭据在生成服务器上手动发布相同的包,如下所述: 现在,构建定义的范围是项目范围(而不是项目集合

我在Team Services中创建了一个构建定义,该定义需要在专用代理(即内部构建服务器)上运行。此代理正在域帐户下运行。然后,我在TeamServices中创建了一个NuGet提要,试图将NuGet Packager任务创建的包发布到该提要

尝试使用NuGet Publisher任务(NuGet v4.0.0.2283)将包推送到内部提要时,我遇到身份验证错误(403禁止):

请注意,我可以使用我的凭据在生成服务器上手动发布相同的包,如下所述:

现在,构建定义的范围是项目范围(而不是项目集合范围)。因此,将项目集合生成服务帐户添加到提要的参与者的默认权限可能不正确。 我认为与此特定团队项目相关的项目构建服务帐户需要添加到贡献者(或所有者)中

由于此团队服务帐户中有15个以上的项目,并且项目生成服务帐户都具有相同的名称,因此需要进行一些工作才能找到正确的帐户。我通过将以下PowerShell内联脚本添加到生成中(我从这里获得:)找到了特定的项目生成服务帐户guid:

现在,我似乎无法通过键入其guid或键入“Project Build Service”从帐户列表中找到具有正确guid的帐户,将Project Build Service帐户添加到提要的参与者


这是一个bug还是我忘记配置了什么?

我设法找到了解决方案。为了其他可能有同样问题的人的利益,这里是如何解决这个问题的

我开始查看RESTAPI以获得提要权限,尝试将特定于项目的构建服务帐户(使用从上述PowerShell脚本收集的id)添加到提要的贡献者

查看,我意识到您需要指定具有以下格式的完整标识描述符:

Microsoft.TeamFoundation.ServiceIdentity;00000000-0000-0000-0000-000000000000:Build:10000000-0000-0000-0000-00000000000 
然后,我修改了内联PowerShell脚本,以显示有关项目生成服务标识的所有信息:

$headers = @{Authorization="Bearer ${env:SYSTEM_ACCESSTOKEN}"}
$response = Invoke-RestMethod "${env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}/_apis/connectionData" -Headers $headers 
$response.authenticatedUser | Format-List | Out-Host
然后我意识到返回的描述符包含第二个guid,该guid出现在“Build:”部分之后,它不同于identityid。此guid还显示在返回的authenticatedUser对象的providerDisplayName属性中

使用提要权限界面,我尝试使用providerDisplayName guid进行搜索,最后得到一个结果!在将此项目构建服务帐户添加到贡献者并运行新构建之后,我能够发布提要

为了便于配置提要的权限,我认为可以改进,因为它只提到项目集合范围的构建定义,而没有提到项目范围的定义


最终,问题源于这样一个事实:如果团队服务帐户包含多个项目,那么为项目的生成服务帐户授予正确的权限并不容易,因为它们都具有相同的名称,即项目生成服务(帐户)。

我设法找到了一个解决方案。为了其他可能有同样问题的人的利益,这里是如何解决这个问题的

我开始查看RESTAPI以获得提要权限,尝试将特定于项目的构建服务帐户(使用从上述PowerShell脚本收集的id)添加到提要的贡献者

查看,我意识到您需要指定具有以下格式的完整标识描述符:

Microsoft.TeamFoundation.ServiceIdentity;00000000-0000-0000-0000-000000000000:Build:10000000-0000-0000-0000-00000000000 
然后,我修改了内联PowerShell脚本,以显示有关项目生成服务标识的所有信息:

$headers = @{Authorization="Bearer ${env:SYSTEM_ACCESSTOKEN}"}
$response = Invoke-RestMethod "${env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}/_apis/connectionData" -Headers $headers 
$response.authenticatedUser | Format-List | Out-Host
然后我意识到返回的描述符包含第二个guid,该guid出现在“Build:”部分之后,它不同于identityid。此guid还显示在返回的authenticatedUser对象的providerDisplayName属性中

使用提要权限界面,我尝试使用providerDisplayName guid进行搜索,最后得到一个结果!在将此项目构建服务帐户添加到贡献者并运行新构建之后,我能够发布提要

为了便于配置提要的权限,我认为可以改进,因为它只提到项目集合范围的构建定义,而没有提到项目范围的定义


最终,问题源于这样一个事实:如果团队服务帐户包含多个项目,那么为项目的构建服务帐户授予正确的权限并不容易,因为它们都具有相同的名称,即项目构建服务(帐户).

如果您将帐户添加为源内权限的所有者,生成结果如何?我的(用户)帐户已经是源的所有者。这可能就是我能够使用VSTS凭据提供程序手动发布到提要的原因。代理服务正在另一个(服务)帐户下运行。我是否需要在VSTS中为此服务帐户创建用户?我在MSDN文档中没有看到这样做的要求…如果您添加帐户作为源内权限的所有者,生成结果会是什么?我的(用户)帐户已经是源的所有者。这可能就是我能够使用VSTS凭据提供程序手动发布到提要的原因。代理服务正在另一个(服务)帐户下运行。我是否需要在VSTS中为此服务帐户创建用户?我在MSDN文档中没有看到这样做的要求……感谢您的信息,我能够解决同样的问题。我发现,在TFS服务器上查看事件查看器,还可以获得有关生成代理使用的帐户的信息。例如:ExceptionMessage:Build\308bbda0 dd