Аутентифицировать REST API с помощью OAuth в VSTS/TFS 2017
Я пытаюсь аутентифицировать вызов REST с помощью OAuth, но я не смог найти образец по этому поводу. Пожалуйста, будьте любезны, чтобы помочь мне в этом (предоставьте образец).
Я имею в виду ниже документацию от Microsoft.
https://www.visualstudio.com/en-us/docs/integrate/get-started/rest/basics
Я могу подтвердить это с помощью NTLM (ниже приведен пример, который я использую). Для этого есть библиотека узлов ( https://www.npmjs.com/package/httpntlm). Но мне нужно нечто подобное для OAuth.
httpntlm.patch(options, function(err,res) {
console.log("patch complete");
console.log(res.body);
})
1 ответ
Вы можете иметь возможность авторизовать доступ к API REST с помощью OAuth 2.0 в VSTS. Пока он доступен только с VSTS, TFS2017 не поддерживается. Вы также можете проверить этот вопрос: TFS 2015 REST API Authentication. И там был связанный пользовательский голос.
Сначала вы зарегистрируете свое веб-приложение и получите идентификатор приложения из Visual Studio Team Services. Используя этот идентификатор приложения, вы отправите своих пользователей в Visual Studio Team Services, чтобы авторизовать ваше приложение для доступа к их учетным записям. Как только они это сделают, вы будете использовать эту авторизацию для получения токена доступа для этого пользователя. Когда вы вызываете API-интерфейсы Visual Studio Team Services от имени этого пользователя, вы используете маркер доступа этого пользователя.
Пример A C#, который реализует OAuth для вызова API REST Visual Studio Team Services в GitHub для вашей справки: https://github.com/Microsoft/vsts-dotnet-oauth-sample
Я не уверен в технологиях, которые вы используете для достижения этой цели, но если ваше приложение представляет собой приложение MVC.Net /.Net Core, то Microsoft предоставила для него образец кода: VSTS Sample Code C#
Однако, если ваше приложение похоже на мое, SPA (на angular) и серверную часть.Net Core, тогда нет документа, четко описывающего, какие части должны идти, куда и как достичь потока OAuth в таком случае. Чтобы ответить на этот вопрос, я добился этого следующим образом:
- Зарегистрируйте свое приложение в VSTS с URL-адресом обратного вызова, указывающим на маршрут обратного вызова в приложении пользовательского интерфейса.
- Добавьте на серверную часть функцию авторизации, чтобы выполнить вызов VSTS для авторизации конечной точки.
- У вас есть кнопка / ссылка в пользовательском интерфейсе, где вы хотите подключиться к VSTS API, указав это на функцию авторизации на бэкэнде. Причина вызова vsts авторизации конечной точки из бэкэнда, а не из пользовательского интерфейса, заключается в том, что vsts authorize возвращает ответ перенаправления 302, а angular 4+ все еще имеет четкий способ справиться с этим. .Net MVC имеет метод redirectreult, который очень хорошо с этим справляется.
- Как только вызов для авторизации будет сделан, вам будет представлен экран "Принять / Запретить", на котором будут показаны все области.
- Как только пользователь примет его, он будет перенаправлен на URL-адрес обратного вызова, который указывает на ваш пользовательский интерфейс.
- Получите код аутентификации из URL-адреса обратного вызова в пользовательском интерфейсе, извлеките код и передайте его в API.
- API вызовет конечную точку токена vsts, передав код аутентификации и секрет клиента.
- API получит токен аутентификации и токен обновления.
- Используйте токен аутентификации для выполнения вызовов API VSTS и сохранения токена обновления (есть много статей, в которых упоминается, как безопасно работать с токенами).
Вот и все, поток OAuth может быть достигнут в Angular и.Net Core указанным выше способом.
Обратите внимание, что это то, что не задокументировано Microsoft, поэтому в этом подходе могут быть недостатки, которые я готов изучить и исправить.
Прокомментируйте, чтобы получить образец репо.