TFS REST API Авторизация - PullRequest
       40

TFS REST API Авторизация

0 голосов
/ 12 февраля 2019

Получение кода неавторизованного статуса при запросе API-интерфейса TFS REST через консольное приложение C # и обновление TFS 2015 3.

Привет всем,

Я пытаюсь контролировать TFS (обновление 2015 г.)3) REST API с консольным приложением C #.

В моем старом приложении я ссылался на библиотеки Microsoft.VisualStudio.Build.Client (и т. Д.) И мог получить доступ к необходимой мне информации через TfsTeamProjectCollection.Честно говоря, я не знаю, откуда взялась аутентификация.Может быть, с помощью учетных данных Windows или учетной записи, связанной с Visual Studio.В любом случае мне не нужно было указывать учетные данные в моем приложении.

Но я не нашел пример для REST API, где мне не нужно было бы специально авторизоваться.

Я нашел пример использования клиентской библиотеки .NET, которая авторизуется с помощью VssCredentials (используя NTLM).Мне также не нужно указывать здесь имя пользователя или дополнительный пароль:

VssConnection connection = new VssConnection(new Uri(URL), new VssCredentials());

Это тоже работает, но я не могу получить всю необходимую информацию об этом, поэтому я сам хотел контролировать API REST.

Может кто-нибудь прислать мне пример того, как я могу получить доступ к REST API без отдельного имени пользователя / пароля?Или это уже невозможно?

Спасибо, Йоханнес

using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    using (HttpResponseMessage response = await client.GetAsync("http://ServerName:8080/tfs/CollectionName/ProjectName/_apis/build/builds/BuildID"))
    {
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseBody);
    }
}

Я ожидаю получить ответ json, но вместо этого получу только Unatorized Exception.

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Вам необходимо добавить HttpClientHandler() к вашему HttpClient:

using (HttpClient client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
{
     // ... 
}
0 голосов
/ 12 февраля 2019

Точно так же, как сказал Shamrai Aleksander, вы можете использовать учетные данные по умолчанию для WebClient, или: Вы можете создать обычный PAT с использованием TFS Security и ограничить доступ пользователей.Пожалуйста, узнайте больше о TFS PAT здесь: https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops

0 голосов
/ 12 февраля 2019

Я также использую HttpClient с именем пользователя или паролем.Я проверил учетные данные по умолчанию и получил 401. Затем я нашел этот пост: Как заставить HttpClient передавать учетные данные вместе с запросом?

Я создал образец с помощью WebClientи работает:

WebClient wc = new WebClient();
wc.UseDefaultCredentials = true;
wc.Headers.Add("Content-Type", "application/json");

var data = wc.OpenRead("http://my-srv:8080/tfs/DefaultCollection/MyProject/_apis/build/builds/MyId?api-version=3.0");

var response = new StreamReader(data).ReadToEnd();
...