通过 Powershell 连接到 TFS 的身份验证错误
Authentication Error Connecting to TFS through Powershell
我对 none 对休息 API 电话知之甚少,所以请多多包涵。我正在尝试通过 Powershell 使用 Rest API 对 TFS 2017 构建进行排队。我尝试使用 TFS API,但发现它无法为我工作。这是我的:
$Uri = "http://MyTFS:8080/tfs/DefaultCollection/Project/_apis/build/builds?api-version=3.0"
$TFSAPIKeyForAutomatedBuild = SecretKey
$body = @"
{
"definition":
{
"ID": "BuildID"
},
"RequestedFor":
{
"Id":"MyID"
}
}
"@
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $TFSAPIKeyForAutomatedBuild")
$buildresponse = Invoke-RestMethod -Method Post -header $headers -ContentType application/json -Uri $Uri -Body (ConvertTo-Json $Body)
然而,当我 运行 这个时,我得到错误:
TF400813: Resource not available for anonymous access. Client
authentication required
顺便说一句,我已经能够使用 Postman 对构建进行排队,因此它应该以某种方式工作。
如有任何建议,我们将不胜感激。
这就是解决我的问题的方法。您必须像这样对用于连接到 TFS 的令牌进行编码:
$encodedPAT = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$TFSAPIKeyForAutomatedBuild"))
$Uri = "http://MyTfs:8080/tfs/DefaultCollection/Projects/_apis/build/builds?api-version=3.0"
$body = @{ definition = @{id = BuildID} }
$bodyJson = ConvertTo-Json $body
write-host $bodyJson
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Basic $encodedPAT")
$buildresponse = Invoke-RestMethod -Method Post -header $headers -ContentType application/json -Uri $Uri -Body (ConvertTo-Json $body)
我还更改了 json 的格式,因为它抛出了有关反序列化的错误。
我对 none 对休息 API 电话知之甚少,所以请多多包涵。我正在尝试通过 Powershell 使用 Rest API 对 TFS 2017 构建进行排队。我尝试使用 TFS API,但发现它无法为我工作。这是我的:
$Uri = "http://MyTFS:8080/tfs/DefaultCollection/Project/_apis/build/builds?api-version=3.0"
$TFSAPIKeyForAutomatedBuild = SecretKey
$body = @"
{
"definition":
{
"ID": "BuildID"
},
"RequestedFor":
{
"Id":"MyID"
}
}
"@
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer $TFSAPIKeyForAutomatedBuild")
$buildresponse = Invoke-RestMethod -Method Post -header $headers -ContentType application/json -Uri $Uri -Body (ConvertTo-Json $Body)
然而,当我 运行 这个时,我得到错误:
TF400813: Resource not available for anonymous access. Client authentication required
顺便说一句,我已经能够使用 Postman 对构建进行排队,因此它应该以某种方式工作。
如有任何建议,我们将不胜感激。
这就是解决我的问题的方法。您必须像这样对用于连接到 TFS 的令牌进行编码:
$encodedPAT = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":$TFSAPIKeyForAutomatedBuild"))
$Uri = "http://MyTfs:8080/tfs/DefaultCollection/Projects/_apis/build/builds?api-version=3.0"
$body = @{ definition = @{id = BuildID} }
$bodyJson = ConvertTo-Json $body
write-host $bodyJson
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Basic $encodedPAT")
$buildresponse = Invoke-RestMethod -Method Post -header $headers -ContentType application/json -Uri $Uri -Body (ConvertTo-Json $body)
我还更改了 json 的格式,因为它抛出了有关反序列化的错误。