Общие сведения о потоке Microsoft Azure AD On-Seal-Of (OBO) - PullRequest
0 голосов
/ 28 июня 2019

FE -> (token_a) Middleman -> (token_b) DownstreamServiceA

Насколько я понимаю, для Middleman для выполнения вызовов API для DownstreamServiceA необходимо обменять на token_b, используяtoken_a.Я пытался смоделировать это поведение в почтальоне.Но я не могу обменять на token_b, используя token_a.Я получаю следующую ошибку

AADSTS65001: The user or administrator has not consented to use the application with ID '{my-middleman-clientid}'

На портале Azure я настроил разрешение API-интерфейса FE для доступа к открытой области API DownstreamServiceA & Middleman.На это я также получил согласие администратора от имени пользователей моей организации.

Получение токена_a

POST to https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
grant_type:password
client_secret: foobar
client_id: my-fe-clientid
username: awesome
password: bar
scope: api://{MiddlemanId}/Middleman.All

Обмен на токен_b

POST to https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token
grant_type: urn:ietf:params:oauth:grant-type:jwt-bearer
client_id: my-middleman-clientid
client_secret: foobar
scope: api://{DownstreamServiceAId}/ServiceA.all
assertion: {token_a}
requested_token_use: on_behalf_of

Могу ли я знать, что я делаю не так?Насколько я понимаю, моему FE нужно запросить и предоставить разрешение на предварительную область действия DownStreamServiceA, что я сделал с помощью гранта администратора на портале Azure.

1 Ответ

1 голос
/ 28 июня 2019

Кажется, вы предоставили доступ FE к Middleman, и вы предоставили доступ FE к DownstreamServiceA, но, возможно, вы не предоставили доступ Middleman к DownstreamServiceA.

Есть несколько способов сделать это, как описано в Предоставление согласия для приложения среднего уровня :

  • В Middlemanm объявите FE как «известное клиентское приложение» (knownClientApplications в манифесте / объекте приложения) и инициируйте «комбинированное» согласие, запросив scope=openid api://{MiddlemanId}/.default в FE. Подсказка о согласии будет включать все разрешения, которые требуются как для FE, так и для Middleman, и записанные гранты будут корректно установлены для FE для Middleman и Middleman для DownstreamServiceA, если необходимо.
  • В DownstreamServiceA объявите Middleman как «предварительно авторизованное» приложение (регистрация приложений> Expose API> авторизованные клиентские приложения). Запрос согласия для FE будет не включать какие-либо из разрешений Middleman to DownstreamServiceA, которые будут считаться уже предоставленными.
  • В Middleman, вручную предоставьте согласие на необходимые разрешения. Иногда это самый простой подход, если вы являетесь администратором арендатора. (Например, регистрация приложений> Разрешения API> Предоставить согласие администратора)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...