TFS 2015 REST API 身份验证

新手上路,请多包涵

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

我们不知道如何生成个人访问令牌或 OAuth 访问令牌。下面的说明似乎比本地 TFS 更适用于 VSO。 https://www.visualstudio.com/en-us/integrate/get-started/rest/basics

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

更新:截至 2017 年 3 月,最新版本的 On-Prem TFS 支持为所有用户创建个人访问令牌。使用@Elmar 提供的以下 javascript 代码,您可以从 REST API 发出更新、编辑 TFS 工作项的请求。

原文由 vikkee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 753
2 个回答

OAuth 机制在撰写本文时针对 VSO api 使用,正如您似乎已经确定的那样。 VSO OAuth 令牌的官方文档在这里

但是,对于本地部署,需要以下内容:

通过 javascript 客户端(注意我在这里使用 jquery 作为 ajax 请求)

由于替代信用或基于令牌的身份验证在本地不可用以匹配当前的 vso 实现;可以考虑以下做法:如果你有TFS应用层的admin权限,可以在IIS中为tfs应用配置基本认证,并 设置默认域

启用基本身份验证和设置域

然后调用如下:

 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);

        });

重要的提示! :如果您启用基本身份验证,您确实应该将您的网站也配置为使用 https,否则您的凭据将以明文形式发送(如上图右上角看到的警告所示)。


通过 .NET 客户端

在本地(当前 rtm’d:2015 更新 1)中,api 通常使用 NTLM 进行门控/隔离,这意味着发出飞行前请求,从服务器返回 401 以挑战身份验证,在这种情况下,设置请求一旦收到预检质询,如下 凭证 允许请求对服务器进行身份验证。为了应对挑战,您可以这样做:

 request.Credentials = new NetworkCredential(this.UserName, this.Password);
//you may want to specify a domain too

如果您已经为 tfs on prem 启用了基本身份验证,您可以尝试如下进行身份验证,此模式与在 ui 中启用替代凭据后调用 vso 时使用的机制相匹配:

 request.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(this.UserName + ":" + this.Password));

注意:在我几周前修改的一些代码中;需要同时支持 VSO 和本地部署,所以我使用上面的两种模式来处理特定场景。

原文由 Elmar 发布,翻译遵循 CC BY-SA 3.0 许可协议

我的问题很老,但截至 2017 年 3 月,最新版本的 On-Prem TFS 支持为所有用户创建个人访问令牌。使用@Elmar 的 javascript 代码,您可以从 REST API 发出更新、编辑 TFS 工作项的请求。

原文由 vikkee 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题