Я пытаюсь получить токен доступа jwt для вызова некоторых конечных точек azure devops API.
Сначала я получаю код через конечную точку oauth:
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.


Чтобы получить доступ к 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 при получении токена доступа.