Ответ 1
Механизм OAuth используется против VSO api во время написания этого, как вы, казалось бы, идентифицировали. официальные документы для токенов VSO OAuth здесь.
Однако для on-prem требуется следующее:
Через javascript-клиент (обратите внимание, что я использую jquery для запроса ajax здесь)
Так как альтернативные creds или токены на основе auth недоступны на предварительном уровне для соответствия текущей реализации 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);
});
ВАЖНОЕ ЗАМЕЧАНИЕ!: Если вы включите базовый auth, вы действительно должны настроить свой сайт на использование https тоже, или ваши учетные данные будут отправляться в виде открытого текста (как указано в предупреждении - вверху справа вверху).
Через клиент .NET
В on-prem (в настоящее время обновление rtm'd: 2015 1) api обычно закрывается/отключается с помощью NTLM, что означает запрос перед полетом, 401 возвращается с сервера на вызов для auth, в этом случае, установка запроса Учетные данные, как показано ниже, позволяет запросить авторизацию на сервере после получения запроса о предполетной проверке. Для решения этой задачи вы можете:
request.Credentials = new NetworkCredential(this.UserName, this.Password);
//you may want to specify a domain too
Если вы включили базовый auth для tfs, вы можете попытаться выполнить аутентификацию следующим образом, этот шаблон соответствует механизму, используемому при вызове vso после включения альтернативных учетных данных в файле ui:
request.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(this.UserName + ":" + this.Password));
Примечание. В некотором коде, который я модифицировал несколько недель назад; необходима поддержка как VSO, так и on-prem, поэтому я использовал два шаблона выше, чтобы разобраться с конкретным сценарием.