Разработано одно 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: Предоставленное значение для входного параметра область действия недопустима, поскольку он содержит более одного ресурса.
Интересует следующее:
- Как правильно получить другой токен доступа для отправки к другому API?
- Не должен ли пользователь будет перенаправлен на страницу входа два раза?
- Можно ли как-то обработать ситуацию одним запросом?
Любые разъяснения или идеи приветствуются, спасибо!