Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TFS 2015 REST API身份验证_Javascript_Rest_Tfs_Tfs 2015 - Fatal编程技术网

Javascript TFS 2015 REST API身份验证

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

我们正在尝试使用Javascript从网页调用TFS 2015 REST API,但在与TFS服务器建立有效身份验证方面遇到了挑战

我们不知道如何生成个人访问令牌或OAuth访问令牌。下面的说明似乎更适用于VSO,而不是本地TFS。

如何生成身份验证密钥/令牌


更新:截至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);
}