Олицетворение пользователя в приложении Microsoft Entra ID

У меня есть 3 разных приложения для регистрации приложений. Все они являются серверными API и используют модуль Azure-identity для аутентификации. Для повышения безопасности мы используем управляемую идентификацию для аутентификации в KeyVaults и других службах Azure, чтобы избежать раскрытия секретов клиента. Я пытаюсь выяснить, как пройти аутентификацию от имени пользователя в других моих приложениях в Azure + мне нужно получить доступ к API Azure DevOps от имени пользователя.

То, что я уже пробовал и надеялся, сработает, но это не сработало: в моем App1->API Permissions-> добавлено разрешение Azure DevOps user_impersonation.

Используя az cli, я получаю токен доступа к моему приложению1: az account get-access-token --resource "api://<app1-client-id>"

Я могу без проблем использовать токен для доступа к своему API App1, но я не могу передать тот же токен в API Azure DevOps и просто получить страницу «Azure DevOps Sing in» обратно из API.

Я упускаю какую-то конфигурацию или концептуально делаю что-то неправильно? Нужно ли мне обменять существующий токен на другой токен, который можно использовать с Azure DevOps?

Аналогичный вопрос: Как выдать себя за пользователя другого приложения Azure AD?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
575
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Добавление Azure DevOpsuser_impersonation через App1->API Permissions в ваше приложение — это только первый шаг. Это позволит вам обменять свой токен пользователя App1 на токен пользователя Azure DevOps.

Обмен токенов должен происходить с потоком от имени . Я думаю, что объем этого запроса на обмен токенов должен быть 499b84ac-1321-427f-aa17-267ca6975798/.default. См. этот раздел в документации Azure DevOps.

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

curl https://login.microsoftonline.com/${AZURE_TENANT_ID}/oauth2/v2.0/token \
  -d 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer' \
  -d 'requested_token_use=on_behalf_of' \
  -d 'scope=499b84ac-1321-427f-aa17-267ca6975798/.default' \
  -d 'client_id=${APP_1_CLIENT_ID}' \
  -d 'client_secret=${APP_1_CLIENT_SECRET}' \
  -d "assertion=${APP_1_USER_TOKEN}"

Примечание. Этот обмен токенами должен происходить с общим секретом. Существует также документированный способ обмена токена с помощью утверждения клиента-носителя jwt, но попытка обмена токена пользователя завершается неудачно с кодом ошибки AADSTS700229 . См. этот выпуск GitHub.

Спасибо вам за разъяснение. Поток OBO использует client_secret, которого мне следует избегать, но согласно документации я также могу использовать сертификат для реализации потока OBO, который мне придется использовать. Я надеялся, что токен аутентификации для моего API можно будет передать другой службе, но это не так. Спасибо!

captainjack42 13.05.2024 23:53

@ captainjack42 именно это я имел в виду в примечании: поток OBO с использованием сертификата, к сожалению, не поддерживает обмен токенов с пользовательским токеном в качестве утверждения.

PSanetra 14.05.2024 09:58

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

Как встроить редактируемый файл Excel в приложение Angular 10 с серверной частью .NET Core 3 и аутентификацией по токену OAuth?
Выход пользователя из нескольких поддоменов с помощью внешнего интерфейса PKCE
OAuth2/OIDC: как идентифицировать клиентское приложение
Нет токена обновления от Google OAuth2
Использование OAuth 2.0 Playground для тестирования потока кода авторизации в приложении веб-сервера
Сервер OAuth API Manager генерирует неверную заявку на аудиторию
Почему для аутентификации Google с использованием Supabase на Flutter необходимы идентификаторы клиентов как для Интернета, так и для Android?
Как получить новый токен доступа из токена обновления в отделе продаж?
Okta SSO (разрешение другим пользователям из другой организации использовать единый вход с приложением OpenID, которое я создал на своей панели разработчика Okta)
OAuth 2 – как безопасно запустить внешний браузер с C#?