Как вы используете аутентификацию OAuth2 для использования с API сервисов DevOps REST - сервис для сервиса? - PullRequest
0 голосов
/ 08 апреля 2020

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

Microsoft предоставляет REST API для выполнения задач как создать выпуск релиза. Смотрите здесь:

https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/create?view=azure-devops-rest-5.1#security

Документация действительно сбивает с толку здесь, поскольку она относится к потоку Oauth 2 как к "accessCode", который, насколько я могу видите, не является ли имя какого-либо действительного типа потока.

В основных документах для вызова API

https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops

он говорит что тело запроса должно выглядеть следующим образом:

client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}

где

{0}: секретный URL-адрес клиента, полученный при регистрации приложения

{1}: URL закодированный «код», предоставленный с помощью параметра запроса кода в URL-адрес обратного вызова

{2}: URL-адрес обратного вызова, зарегистрированный в приложении

Это противоречит документации для создания выпуска (первая ссылка ) который говорит:

Тип: oauth2 Поток: accessCode

URL авторизации: https://app.vssps.visualstudio.com/oauth2/authorize&response_type=Assertion

URL токена: https://app.vssps.visualstudio.com/oauth2/token?client_assertion_type=urn: ietf: params: oauth: тип утверждения клиента: jwt-bearer & grant_type = urn: ietf: params: oauth: тип предоставления: jwt-bearer

То есть во-первых , делает Anyo Не знаете, какая документация правильная, первая или вторая?

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

Я не хочу, чтобы пользователи приложения имели разрешения на создание релиза в приложении, так как многие даже не будут пользователями ADO, не говоря уже о разрешениях на создание релизов .

Я бы подумал, что API будет поддерживать тип предоставления Oauth 2 client_credentials (предоставление кода авторизации), но я не вижу примеров этого в документации для служб ADO REST.

1 Ответ

1 голос
/ 09 апреля 2020

Чтобы аутентифицировать пользователей вашего веб-приложения для доступа к REST API, вы должны следовать приведенной ниже документации:

https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops

Сначала зарегистрируйте свое веб-приложение и получите идентификатор приложения от Azure DevOps Services. Используя этот идентификатор приложения, отправьте своих пользователей в Azure DevOps Services, чтобы авторизовать ваше приложение для доступа к их организациям. Затем используйте эту авторизацию для получения токена доступа для этого пользователя. Когда вы вызываете Azure API DevOps Services для этого пользователя, используйте маркер доступа этого пользователя.

Usually you add a link or button to your site that navigates the user to the Azure DevOps Services authorization endpoint

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...