Javascript TFS 2015 REST API身份验证
我们正在尝试使用Javascript从网页调用TFS 2015 REST API,但在与TFS服务器建立有效身份验证方面遇到了挑战 我们不知道如何生成个人访问令牌或OAuth访问令牌。下面的说明似乎更适用于VSO,而不是本地TFS。 如何生成身份验证密钥/令牌Javascript TFS 2015 REST API身份验证,javascript,rest,tfs,tfs-2015,Javascript,Rest,Tfs,Tfs 2015,我们正在尝试使用Javascript从网页调用TFS 2015 REST API,但在与TFS服务器建立有效身份验证方面遇到了挑战 我们不知道如何生成个人访问令牌或OAuth访问令牌。下面的说明似乎更适用于VSO,而不是本地TFS。 如何生成身份验证密钥/令牌 更新:截至2017年3月,最新版本的on-Prem TFS支持为所有用户创建个人访问令牌。通过@Elmar使用下面的javascript代码,您可以从RESTAPI请求更新、编辑TFS工作项 在撰写本文时,OAuth机制是针对VSO a
更新:截至2017年3月,最新版本的on-Prem TFS支持为所有用户创建个人访问令牌。通过@Elmar使用下面的javascript代码,您可以从RESTAPI请求更新、编辑TFS工作项 在撰写本文时,OAuth机制是针对VSO api使用的,正如您所确定的那样 但是,对于on-prem,需要以下内容: 通过javascript客户端(注意,我在这里使用jquery处理ajax请求) 由于prem上没有替代的CRED或基于令牌的身份验证来匹配当前的vso实现;您可以考虑以下方法:如果您对TFS APP层有管理员权限,可以在IIS中配置TFS应用程序的基本身份验证,并且<强>设置默认域>/P> 然后按如下方式调用:
var self = this;
self.tasksURI = 'https://<SERVER>/tfs/<COLLECTION>/<PROJECT>/_apis/build/builds?api-version=2.0';
self.username = "<USERNAME>"; //basic username so no domain here.
self.password = "<PASSWORD>";
self.ajax = function (uri, method, data) {
var request = {
url: uri,
type: method,
contentType: "application/json",
accepts: "application/json",
cache: false,
dataType: 'json',
data: JSON.stringify(data),
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa(self.username + ":" + self.password));
},
error: function (jqXHR) {
console.log("ajax error " + jqXHR.status);
}
};
return $.ajax(request);
}
self.ajax(self.tasksURI, 'GET').done(function (data) {
alert(data);
});
如果您已在prem上为tfs启用了基本身份验证,则可以按如下方式尝试身份验证,此模式与在ui中启用替代凭据后调用vso时使用的机制相匹配:
request.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(this.UserName + ":" + this.Password));
注意:在我几周前修改的一些代码中;需要同时支持VSO和on prem,因此我使用上述两种模式来处理特定场景。如果可能,我建议使用Visual Studio团队服务(和TFS)的.NET客户端库: 您可以使用windows身份验证(这正是我所需要的)。在我的代码中包含以下nuget包之后:
Microsoft.TeamFoundationServer.Client
Microsoft.VisualStudio.Services.Client
Microsoft.VisualStudio.Services.InteractiveClient
我能够编写以下代码:
// Create instance of VssConnection using Windows credentials (NTLM)
var connection = new VssConnection(new Uri("http://mytfsserver:8080/tfs/CollectionName"), new VssClientCredentials());
// Create instance of WorkItemTrackingHttpClient using VssConnection
var gitClient = connection.GetClient<GitHttpClient>();
var items = gitClient.GetRepositoriesAsync().Result;
foreach (var item in items)
{
Console.WriteLine(item.Name);
}
//使用Windows凭据(NTLM)创建VssConnection的实例
var连接=新VssConnection(新Uri(“http://mytfsserver:8080/tfs/CollectionName),新的VssClientCredentials();
//使用VssConnection创建WorkItemTrackingHttpClient的实例
var gitClient=connection.GetClient();
var items=gitClient.GetRepositoriesAsync().Result;
foreach(项目中的var项目)
{
Console.WriteLine(项目名称);
}
另请参见:我的问题很老,但截至2017年3月,最新版本的on-Prem TFS支持为所有用户创建个人访问令牌。使用@Elmar的javascript代码,您可以从RESTAPI请求更新、编辑TFS工作项 感谢@Elmar在这里分享您的答案。我正在编写更多的java脚本,因此我试图了解如何创建个人访问令牌来代替请求头“Authorization”中的myPatToken,如这里所述<代码>标题:{'Authorization':'Basic'+btoa(“+”:“+myPatToken)}@vikkee请查看修改后的答案。我已经提供了基本的身份验证信息和javascript代码片段。就令牌而言,我本人希望它位于prem上。非常感谢您详细的javascript语法,我对我所在的TFS管理员没有权限或影响力,因此我需要首先找到解决方法。有没有可能找出管理员已经启用了哪些类型的身份验证?@vikkee实际上,你需要一个管理员来确认。您可以要求管理员在应用程序层上运行下面的命令,然后给出命令的输出:<代码> %StoundRoad%\Stult32 \EnSrv\AppCMD.EXE列表COFIG“Team Foundation Server /TFS”-部分:WOWDOWSUnTurnation 。您还可以将
基本验证
提供给-部分
参数,并获取该参数的输出。但是,这不会确切地告诉您基本身份验证是如何配置的。我的答案中的程序是一种使其得以实现的方法。@vikkee作为旁白如果您打算尝试NTLM路线作为一种可能性,请也检查这个问题:太好了!谢谢你的反馈@Vikkeers PAT和javascript代码有什么关系?它使用用户名/密码,而不是PAT。@PABRAM感谢您的输入,谢谢您的更正。它没有使用任何PAT,只是再次检查。我将进行编辑。@vikkee哦,好的,谢谢,我不确定我是否真的对某些事情感到困惑
// Create instance of VssConnection using Windows credentials (NTLM)
var connection = new VssConnection(new Uri("http://mytfsserver:8080/tfs/CollectionName"), new VssClientCredentials());
// Create instance of WorkItemTrackingHttpClient using VssConnection
var gitClient = connection.GetClient<GitHttpClient>();
var items = gitClient.GetRepositoriesAsync().Result;
foreach (var item in items)
{
Console.WriteLine(item.Name);
}