Получите токены доступа с response-aad-msal для двух разных ресурсов и областей - PullRequest
0 голосов
/ 17 января 2020

Разработано одно React приложение, которое должно вызывать два разных API с токенами доступа. Код приложения использует для аутентификации библиотеку реагировать-aad-msal . Первоначально приложение было создано для вызова только одного API, где я запросил необходимый токен доступа, который работает как шарм.

Согласно Документация Microsoft об использовании разрешений, которая гласит:

Токен доступа может использоваться только для одного ресурса, но закодированный внутри токена доступа - это каждое разрешение, предоставленное вашему приложению для этого ресурса.

Исходя из того, что мне нужно запросить два разных токена доступа, потому что ресурсы разные , это понятно.

Рабочее решение только с одним ресурсом и область действия:

Создание необходимого поставщика для <AzureAD> оболочки:

const config = {
   auth: {
      authority: process.env.REACT_APP_AUTH_AUTHORITY,
      clientId: process.env.REACT_APP_AUTH_CLIENT_ID,
      redirectUri: process.env.REACT_APP_AUTH_REDIRECT_URI
   },
   cache: {
      cacheLocation: 'localStorage',
      storeAuthStateInCookie: true
   }
};

const authenticationParameters = {
   scopes: ['https://<our-api-name>.azurewebsites.net/user_impersonation'],
};

// saved to AuthenticationService.provider - logic removed
new MsalAuthProvider(config, authenticationParameters, LoginType.Redirect);

Затем передача его <AzureAD> оболочке:

<AzureAD provider={AuthenticationService.provider}
         forceLogin={true}>

Нет вопросы здесь.

Вопросы:

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

Как только я пытаюсь добавить в массив областей другой ресурс и область видимости следующим образом:

const authenticationParameters = {
    scopes: [
       'https://<our-app-name>.azurewebsites.net/user_impersonation',
       'https://<tenant-name>.onmicrosoft.com/<api-guid>/access_as_user'
    ],
};

Очевидно, что выдается следующее сообщение об ошибке:

AADSTS28000: Предоставленное значение для входного параметра область действия недопустима, поскольку он содержит более одного ресурса.

Интересует следующее:

  1. Как правильно получить другой токен доступа для отправки к другому API?
  2. Не должен ли пользователь будет перенаправлен на страницу входа два раза?
  3. Можно ли как-то обработать ситуацию одним запросом?

Любые разъяснения или идеи приветствуются, спасибо!

Ответы [ 2 ]

1 голос
/ 17 января 2020

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

  • Точка входа API нацелен на обслуживание вашего приложения React и аналогичных потребителей - это может быть фирменным знаком API пользовательского интерфейса
  • Точки входа, чтобы вызывать основные службы для выполнения реальной работы - это могут быть продукты, пользователи, фондовые API

В этой настройке каждый пользовательский интерфейс должен вызывать только один API, а работа с OAuth, связанная с получением данных из нескольких источников, упрощается

1 голос
/ 17 января 2020

Как правильно получить другой токен доступа для отправки другому API?

К сожалению, я не уверен, как это сделать в контексте этой библиотеки. Обычно вы вызываете acquTokenSilent дважды для объекта UserAgentApplication.

Разве пользователь не будет перенаправлен два раза на страницу входа?

Нет. Вы указываете обе области для перенаправления входа в систему. Затем вы можете получить два токена без участия пользователя без участия пользователя.

Можно ли как-то обработать ситуацию одним запросом

См. Выше, вам нужно один раз вызвать login и дважды приобрестиTokenSilent.

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