2016-03-17 2 views
11

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

Мы не знаем, как создавать токены доступа или токены доступа OAuth. Приведенная ниже инструкция, похоже, применима в большей степени к VSO, чем к локальному TFS. https://www.visualstudio.com/en-us/integrate/get-started/rest/basics

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

ОБНОВЛЕНИЕ: Как и в марте 2017 года, последняя версия On-Prem TFS поддерживает создание токенов доступа для всех пользователей. Используя приведенный ниже код javascript от @Elmar, вы можете делать запросы на обновление, редактировать рабочие элементы TFS из REST API.

ответ

13

Механизм OAuth используется против VSO api во время написания этого, как вы, казалось бы, идентифицировали. official docs for VSO OAuth tokens here.

Для на прут однако, требуется следующее:

Через яваскрипт клиента (обратите внимание, я использую JQuery для запроса Ajax здесь)

Поскольку альтернативных кредитки или маркер на основе аутентификации ISN доступный на предварительном уровне для соответствия текущей реализации 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); 

     }); 

ВАЖНО! : Если вы включите базовый auth, вы действительно должны настроить свой сайт на использование 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 на прете можно попытаться аутентичности следующим образом, эта модель соответствует механизму, используемому при вызове вса после включения альтернативных учетных данных в ui:

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

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

+0

С благодарностью @Elmar за ваши ответы здесь. Я пишу больше java-скрипта, поэтому я пытаюсь выяснить, как создать токен доступа для личного доступа вместо myPatToken в заголовке запроса «Авторизация», как упоминалось здесь? 'headers: { 'Авторизация': 'Basic' + btoa (" "+": "+ myPatToken) }' – vikkee

+2

@vikkee см. измененный ответ. Я предоставил базовую информацию об аутентификации и фрагмент javascript. что касается токена, я сам бы хотел его на премьере. – Elmar

+0

Большое спасибо за ваш подробный синтаксис javascript, у меня нет разрешения или влияния на администратора TFS у меня, поэтому мне нужно сначала выяснить, как это сделать. Возможно ли узнать, что все типы аутентификации уже включены администратором? – vikkee

0

Если возможно, я рекомендую использовать.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

1

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

+0

Отлично! Спасибо за отзывы @vikkee – Elmar

Смежные вопросы