Как получить доступ к azure devops apis через приложение azure?

Я пытаюсь получить токен доступа jwt для вызова некоторых конечных точек azure devops API.

Сначала я получаю код через конечную точку oauth:

https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?client_id=CLIENT_ID&response_type=code&prompt=select_account&scope=CLIENT_ID/.default&redirect_uri=https://foo.bar.com/auth

CLIENT_ID/.по умолчанию == user_impersonation и Пользователь.Чтение

это возвращает мне code

Затем я использую этот код, чтобы сделать почтовый запрос:

https://login.microsoftonline.com/organizations/oauth2/v2.0/token

с

grant_type:authorization_code
client_id:CLIENT_ID
client_secret:SECRET
scope:CLIENT_ID/.default
redirect_uri:https://foo.bar.com/auth
code:CODE

это возвращает мне access_token. Однако этот токен доступа, похоже, мало что может сделать.

Я пробовал это с https://graph.microsoft.com/v2.0/me/ (он всегда возвращает Access token validation failure. Invalid audience.) и https://dev.azure.com/paradime-io/_apis/git/repositories?api-version=2.0 (просто html для входа в систему) - оба используют заголовок Authorization: Bearer {access_token}, но они не работают.

Я также пытался использовать его с git clone... именем пользователя и паролем, но это тоже не работает.

Я также пытался использовать on_behalf_of и конечную точку /token:

grant_type:urn:ietf:params:oauth:grant-type:jwt-bearer
client_id:CLIENT_ID
client_secret:SECRET
scope:CLIENT_ID/.default
//client_assertion_type:urn:ietf:params:oauth:client-assertion-type:jwt-beare
requested_token_use:on_behalf_of
assertion:CODE

но возвращенный access_token также нельзя использовать на других конечных точках API.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы получить доступ к API Azure DevOps через приложение Azure AD, вам необходимо создать токен доступа jwt с областью действия 499b84ac-1321-427f-aa17-267ca6975798/.default.

Я зарегистрировал одно приложение Azure AD и добавил разрешения API, как показано ниже:

Чтобы получить код авторизации, я выполнил следующий запрос авторизации в браузере перед получением токена:

https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/authorize
?client_id=<appID>
&response_type=code
&redirect_uri=https://jwt.ms
&response_mode=query
&scope=499b84ac-1321-427f-aa17-267ca6975798/.default
&state=12345

Когда я выполнил вышеуказанный запрос в браузере, я успешно получил значение code в адресной строке, например:

Я сгенерировал токен доступа, успешно используя поток кода авторизации через Postman, включив приведенный выше код в запрос ниже:

POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
grant_type:authorization_code
client_id: <appID>
client_secret: <secret>
scope: 499b84ac-1321-427f-aa17-267ca6975798/.default
code: <paste_code_from_above_request>
redirect_uri: https://jwt.ms

Ответ:

Когда я использовал указанный выше токен доступа для вызова следующего DevOps API, я успешно получил ответ, как показано ниже:

GET https://dev.azure.com/<orgname>/_apis/git/repositories?api-version=2.0

Ответ:

Чтобы вызвать Microsoft Graph, вам нужно изменить значение области на https://graph.microsoft.com/.default при получении токена доступа.

Другие вопросы по теме