Аутентификация API REST TFS 2015

мы пытаемся вызвать API REST TFS 2015 с веб-страницы с помощью Javascript и имеем проблему в установлении действительной аутентификации с сервером TFS.

мы не знаем, как генерировать личные маркеры доступа или маркеры доступа OAuth. Инструкция ниже покажется применить к ВСО, чем на предприятии ТФС. https://www.visualstudio.com/en-us/integrate/get-started/rest/basics

Как я могу создать ключ/токен аутентификации?

UPDATE: как и в марте 2017 года, последняя версия On-Prem TFS поддерживает создание личных токенов доступа для всех пользователей. Используя приведенный ниже код javascript @Elmar, вы можете делать запросы на обновление, редактирование TFS workitems из REST API.

3 ответов


механизм OAuth используется против api VSO на момент написания этого, как вы, по-видимому, определили. официальные документы для токенов VSO OAuth здесь.

для on-prem, однако, требуется следующее:

через клиент javascript (обратите внимание, что я использую jquery для запроса ajax здесь)

поскольку альтернативные creds или маркер на основе auth недоступны на-prem для соответствия текущей реализации vso; вы можете рассмотреть следующий подход: если у вас есть разрешения администратора на уровне приложений TFS, можно настроить базовую проверку подлинности для приложения TFS в IIS и установите домен по умолчанию.

enabling basic auth and setting domain

и затем вызвать следующим образом:

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

В on-prem (в настоящее время rtm'd: 2015 update 1) api, как правило, огорожен/огорожен NTLM, что означает, что запрос перед полетом сделан, 401 возвращается с сервера, чтобы бросить вызов для auth, в этом случае установка запроса набор как показано ниже, запрос на аутентификацию на сервере после получения запроса на предполетную проверку. Чтобы принять вызов, который вы можете сделать это:

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

Если вы включили базовую аутентификацию для TFS на prem, вы можете попытаться аутентифицировать следующим образом, этот шаблон соответствует механизму, используемому при вызове vso после включения альтернативных учетных данных в пользовательском интерфейсе:

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

Примечание: В некотором коде я изменил несколько недель назад; поддержка как VSO, так и on-prem была необходима, поэтому я использовал два шаблона выше, чтобы иметь дело с конкретным сценарием.


мой вопрос старый, но, как и в марте 2017 года, последняя версия On-Prem TFS поддерживает создание личных токенов доступа для всех пользователей. Используя код javascript @Elmar, вы можете делать запросы на обновление, редактирование TFS workitems из REST API.


Если возможно, я бы рекомендовал использовать клиентские библиотеки .NET для Visual Studio Team Services (и TFS):

https://www.visualstudio.com/en-us/docs/integrate/get-started/client-libraries/dotnet

вы можете использовать проверку подлинности 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);
}

Смотрите также: https://www.visualstudio.com/en-us/docs/integrate/get-started/client-libraries/samples