我试图在仪表板小部件中使用Microsofts VSTS SDK中的REST API在TFS 2015 Update 3服务器上获取所有现有构建定义:
VSS.init({
explicitNotifyLoaded: true,
usePlatformStyles: true
});
VSS.require("TFS/Dashboards/WidgetHelpers", "TFS/Build/RestClient", "VSS/Authentication/Services"],
function (WidgetHelpers, TFS_Build_Api) {
VSS.register("BuildStatusMonitor.Configuration", function () {
return {
load: function (widgetSettings, widgetConfigurationContext) {
var buildClient = TFS_Build_Api.getClient();
buildClient.getDefinitions().then(function(definition) {
//
}, function(reason) {
// 401
});
},
}
});
VSS.notifyLoadSucceeded();
});
不幸的是我总是得到一个
TFS.WebApi.Exception:TF400813:资源不可用于匿名访问。需要客户端身份验证。
我做错了什么?
当我在chromes开发者控制台上发送get请求时,我收到正确的响应:= /
$获得(" HTTP:// *****:8080 / TFS / TestReporting / DashboardWidgets / _apis /建造/定义API-版本= 2.2&#34).success(函数( res){console.log(res)})
答案 0 :(得分:0)
可能需要启用备用凭据。请看这个链接:https://binary-stuff.com/post/how-to-enable-alternate-credentials-in-visual-studio-online-vso
此链接对于以正确方式设置身份验证非常有帮助:https://www.visualstudio.com/en-us/docs/integrate/get-started/auth/overview
答案 1 :(得分:0)
根据错误信息,您可能需要对TFS REST API进行身份验证。
VSTS和TFS有不同的身份验证方法,两者都可以通过PowerShell实现。
为了在脚本中使用TFS进行身份验证,您可以通过PowerShell将用户名和密码(屏蔽为秘密变量)传递到 PSCredential < / strong>对象并在调用REST方法时使用 -Credential 开关。如下例子:
$securePassword = $Password | ConvertTo-SecureString -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($User, $securePassword)
$releaseresponse = Invoke-RestMethod -Method Get -Credential $credential -ContentType application/json -Uri $Uri
答案 2 :(得分:0)
当用户没有权限访问build rest-client时,另一种方法是使用PAT身份验证。使用VSS-SDK和Typescript / Javascript时,可以使用以下技术来设置PAT身份验证。按照步骤here生成的PAT被直接粘贴到“ {PAT}”中而没有':'。
import service = require("VSS/Service");
import buildRestClient = require("TFS/Build/RestClient");
import { BuildHttpClient } from "TFS/Build/RestClient";
import { VssHttpClient } from "VSS/WebApi/RestClient";
import { BasicAuthTokenManager } from "VSS/Authentication/Services";
...
const buildClient: BuildHttpClient =
service.getClient(buildRestClient.BuildHttpClient);
(buildClient as VssHttpClient).authTokenManager =
new BasicAuthTokenManager("", "{PAT}");
// Subsequent calls will now use PAT authentication
const builds: Build[] = await buildClient.getBuilds(projectId);