MSGraph лучший поток аутентификации для единого входа

Я пытаюсь понять потоки аутентификации Microsoft Graph и то, что мне следует использовать для своего приложения. Он уже работает, но есть некоторые проблемы с текущей настройкой, и мы перестраиваем его для AWS, и я хочу поближе взглянуть на то, как правильно обрабатывать поток аутентификации MS Graph.

Вариант использования: в настоящее время я создаю экспресс-API node.js и хотел бы добавить интеграцию с Microsoft Graph. Чтобы, когда пользователь заходит на наш портал, он заходил в календари, переходил на М365 и нажимал «Добавить интеграцию». Затем пользователю необходимо один раз пройти аутентификацию, после чего календарь можно будет получить. Для использования устройствами, подключенными к нашему порталу (на этих устройствах на небольших планшетах работает наше приложение Android). Поэтому я хотел бы получить данные с помощью веб-перехватчиков, чтобы мы могли прослушивать, создается ли/изменяется/удаляется бронирование, и обновлять данные в нашей базе данных. Кроме того, мы хотели бы, чтобы это работало в многопользовательских средах.

Как я это делал: в своем текущем приложении я использовал следующие библиотеки, специфичные для MS Graph:

      "@microsoft/microsoft-graph-client": "^2.0.0",
"msal": "^1.0.0",
"passport-azure-ad": "^4.2.0",
"simple-oauth2": "^3.1.0",

Я начал с настройки паспорта с помощью OIDCStrategy с несколькими параметрами env, такими как clientId,identMetadata и т. д., вместе с функцией SignInComplete. Таким образом, в тот момент, когда пользователь хочет авторизовать /auth/signin, он вызывается и используетpassport.authenticate('azuread-openidconnect')вместе с некоторыми параметрами, чтобы получить приглашение для входа в систему. Затем будет запрошено разрешение на добавление приложения Cleverspace Azure к арендатору. Если это будет принято, будет вызван метод /auth/callback, и если все пройдет успешно, будет вызвана функция Signincomplete. Затем создается токен oath2 с использованием библиотеки simple-oauth2 с параметрами client и auth env. Функция просто сохраняет пользователя MS Graph в нашу базу данных вместе с его токеном. Если срок действия токена истек, мы продлеваем его, снова используя библиотеку simple-oauth2, и используем метод .refresh для токена.

Проблема: теперь мне интересно, является ли этот способ аутентификации по-прежнему действительным, а также есть ли способ справиться с проблемами с процессом входа в систему. Потому что на данный момент, когда пользователь выполняет процесс входа в систему, но поток предоставления согласия администратора отключен, он получает сообщение о том, что требуется одобрение администратора. По какой-то причине, когда пользователь входил в систему с учетной записью администратора, чтобы добавить приложение в среду, и удалял учетную запись администратора с портала, чтобы добавить учетную запись, не являющуюся администратором, которая будет получать календарь, но, похоже, это не работает. Поскольку эта учетная запись не может получить какие-либо данные, я предполагаю, что это связано с тем, что учетная запись, используемая для добавления приложения Azure, является учетной записью, которая необходима для получения данных из их среды. Если я не делаю что-то не так или что-то упускаю, на данный момент я понятия не имею, как правильно это решить.

Вопрос:

  1. Действителен ли мой текущий поток аутентификации для моего варианта использования, или мне нужно использовать другой поток с единым входом, поскольку необходимость многократного входа в систему для поддержания работоспособности системы довольно раздражает?
  2. Если я сохраняю текущий поток, есть ли способ решить проблему с одобрением администратора, с которой я столкнулся?
  3. Если необходим другой поток, является ли поток «Требуется одобрение администратора» возможным результатом из-за их конфигурации Azure, и есть ли решение для устранения моей проблемы в этом случае?

Есть идеи?

Заранее спасибо!

1 ответ

Создайте приложение Azure AD, выбрав «
Учетные записи в любом каталоге организации (любой клиент Microsoft Entra ID — мультитенант) » для поддержки мультитенантных сред :

введите сюда описание изображения

Реализуемый вами поток аутентификации действителен. Если вы не хотите, чтобы пользователи входили в систему несколько раз, вы можете реализовать поток от имени . Обратитесь к этой теме SO от меня.

Когда я попытался войти в приложение, я получил ту же ошибку, что и ниже:

введите сюда описание изображения

Ошибка «Требуется одобрение администратора» обычно возникает, если разрешения API, добавленные в приложение Azure AD, не получили согласия администратора.

Чтобы предоставить согласие администратора, у вас должна быть роль глобального администратора, администратора привилегированной роли или администратора приложения.

Перейдите на портал Azure -> Microsoft Entra ID -> Регистрация приложений -> Ваше приложение -> Разрешения API -> Предоставить согласие администратора.

введите сюда описание изображения

В противном случае предоставьте согласие администратора арендатора, используя следующую конечную точку:

      https://login.microsoftonline.com/organizations/adminconsent?client_id=ClientID

И нажмите принять :

введите сюда описание изображения

Согласие администратора, предоставленное разрешениям API:

введите сюда описание изображения

Если проблема не устранена , проверьте следующее:

Перейдите на Портал Azure -> Корпоративные приложения -> Согласие и разрешения -> Параметры согласия пользователя.

Установите для параметров согласия пользователя значение Allow user consent for apps:

введите сюда описание изображения

Используйте рабочий процесс согласия администратора , если вы не хотите предоставлять всем пользователям разрешение на доступ к приложению:

Перейдите в Корпоративные приложения -> Согласие и разрешения -> Настройки согласия администратора.

введите сюда описание изображения

Когда пользователь входит в систему, появляется экран «Требуется одобрение» :

введите сюда описание изображения

Ссылка:

Настройка рабочего процесса получения согласия администратора — Microsoft Entra

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