DevOps: неинтерактивный вход в систему в новых DevOps (VSTS) не работает при получении ошибки 'TF30063: Вы не авторизованы для доступа - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь подключиться к DevOps Azure, ранее известному как VSTS, используя c #. Я хочу подключиться к нему без экрана входа в Azure DevOps. В настоящее время я пытаюсь следующий код, но некоторые, как он не работает

        NetworkCredential netCred = new NetworkCredential("test@hotmail.com", "test");
        Uri tfsuri = new Uri("https://dev.azure.com/test10");
        VssBasicCredential bsCred = new VssBasicCredential(netCred);
        VssCredentials vssCred = new VssClientCredentials(bsCred);

        TfsTeamProjectCollection collection = new TfsTeamProjectCollection(tfsuri, vssCred);

        collection.Authenticate();

        var witClient = collection.GetClient<ProjectHttpClient>();
        var listOfProjects = witClient.GetProjects().Result;

библиотеки, которые я использую

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Core.WebApi;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.Operations;
using Microsoft.VisualStudio.Services.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.Client;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;

Код запрашивает экран входа в систему, на котором, если я ввожу пароль, аутентификация все равно не работает. Я не хочу, чтобы отображался экран входа в систему, и хочу подключиться только с именем пользователя и паролем.

При использовании альтернативных учетных данных этот метод работает, но это не мое требование, и я не могу использовать альтернативные учетные данные.

Я пытался следовать образцам с официального сайта , но для новых DevOps не работает ни одно решение.

Любое решение, как я могу аутентифицироваться с usernanme / паролем в новых DevOps без экрана входа в систему

1 Ответ

0 голосов
/ 14 ноября 2018

Класс TfsTeamProjectCollection взят из старых библиотек .Net, попробуйте новые библиотеки Azure DevOps .Net , и вы можете пройти проверку подлинности несколькими способами:

NTLM

Самый базовый - это создание экземпляра VssCredentials без каких-либо параметров, и то, что вы будете использовать, это просто встроенная аутентификация / NTLM:

var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssCredentials());

Базовая аутентификация

VSTS и TFS также предоставляют средства для использования базовой аутентификации (HTTP AUTH), которую необходимо сначала создать и включить ( см. Рекомендации VSTS ), и как только вы это сделаете, вы сможете использовать их через API, как это:

var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssBasicCredential(username, password));

токены личного доступа

Далее следуют персональные токены доступа (PAT), которые вы можете легко создавать , следуя рекомендациям VSTS, и эти PAT являются средством аутентификации отдельно от ваших фактических учетных данных с помощью детализированных областей доступа и маркеров доступа. безопасности. Проще говоря, это позволяет вам создавать PAT для каждого варианта использования или даже приложения и, таким образом, обеспечивает безопасный и четко отделенный способ предоставления приложению или третьему лицу доступа к вашей системе VSTS или TFS от вашего имени.

Чтобы использовать их через API, вы используете тот же механизм, что и при базовой аутентификации, но вы просто не предоставляете никакого имени пользователя (ну, точнее, пустого), а сам PAT используется в качестве пароля:

var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssBasicCredential(string.Empty, pat));

Приглашение для входа в Visual Studio

Более того, другой способ аутентификации - использование стандартной подсказки VS Sign-In, которая также проста и доступна через класс VssClientCredentials :

var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssClientCredentials());

OAuth-аутентификация

OAuth - это широко используемый, но немного более утомительный протокол авторизации для реализации, но, к счастью, в CodePlex есть подробный пример приложения, специально предназначенного для VSTS / VSO (который также работает для локальных систем).

Когда у вас есть соответствующий токен доступа, вы можете использовать его для VSTS / TFS, используя VssOAuthCredential класс:

var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssOAuthCredential(accessToken));

Аутентификация Azure Active Directory

И последнее, но не менее важное: вы можете использовать удостоверения Azure Active Directory для аутентификации в системе VSTS или TFS через класс VssAadCredential:

var visualStudioServicesConnection = new VssConnection(new Uri(baseUri), new VssAadCredential(username, password));
...