【问题标题】:Permissions required for these TFS (on premise) REST urls?这些 TFS(本地)REST url 所需的权限?
【发布时间】:2018-07-02 14:31:59
【问题描述】:

我正在尝试自动化一些需要代理池和代理信息的作业,虽然作业脚本对于我的 TFS 集合的普通用户来说工作得很好,但对于服务帐户来说却失败了。

我的作业脚本尝试访问网址

http://<instance>/<collection>/_apis/distributedtask/pools
http://<instance>/<collection>/_apis/distributedtask/pools/<pool>/agents

最初我的服务帐户收到了类似的响应

TF400813: The user &#39;<service account>&#39; is not authorized to access this resource

服务帐户以前不是任何与 TFS 相关的 AD 组的成员,但在创建新组并将其添加到“项目集合有效用户”后,调用不会失败,但响应仍然不包含任何池信息。

如果我修改服务帐户交互式登录,代理池中代理的 GUI 不会显示任何信息,但会显示提示

no agents are registered or you do not have permission to view the agents 

建议缺少权限。

我曾尝试将服务帐户添加到 TFS 中的各个组,例如项目集合管理员、项目集合构建管理员等,但均无济于事。

那么简而言之,服务帐户需要什么权限才能从开头提到的 url 中检索信息?

【问题讨论】:

    标签: rest tfs


    【解决方案1】:

    我可以重现此问题,即使将普通用户更改为服务帐户也不起作用。

    因此,作为目前的解决方法,您可以使用普通用户或脚本中的 PAT 调用 REST API。

    以下 PowerShell 脚本适用于我:

    $user = "Domain\username"
    $token = "password"
    
    # Base64-encodes the Personal Access Token (PAT) appropriately
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
    
    $uri = "http://SERVER:8080/tfs/_apis/distributedtask/pools/1/agents/5"
    $result = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
    
    Write-Host "result = $($result | ConvertTo-Json -Depth 100)"
    

    【讨论】:

    • 是的,这可行,但出于公司政策的原因,这对我来说不可行。
    • @MichaelWraa-Hansen PAT 怎么样?您可以为用户和密码或 PAT 创建秘密变量,然后在脚本中使用这些变量。
    • 我想我可以将它用作临时解决方案,但没有获得适当解决方案的希望,我认为无论密码是否保存在一个地方或另一个地方都行不通。更改用户密码的要求通常也会令人讨厌。 PS:如果重要的话,我正在使用 TFS 17 更新 2。
    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多