Аутентификация 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 и установите домен по умолчанию.
и затем вызвать следующим образом:
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