Ошибка при попытке доступа к календарям других пользователей с помощью MS Graph API - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть приложение node.js / express. Я пытаюсь использовать Microsoft Graph API для получения пользовательских календарей [только для чтения].

Библиотека OAuth2 для входа в систему: passport-microsoft модуль npm.

Я выполнил следующие шаги на портале Azure:

  1. Перейдите в Active Directory

  2. Нажмите Регистрация приложений влевая панель

  3. Нажмите «Новая регистрация» и создайте приложение
  4. Перейдите в новое приложение
  5. Нажмите «Аутентификация» на левой панели и добавьте URI перенаправления
  6. Перейти к разрешениям API и включить следующее:

    a. Делегированный: Calendars.Read, Calendars.Read.Shared, профиль

  7. Предоставить согласие администратора для всех разрешений, для которых он требуется.

Однако только пользователи, принадлежащие моемуОрганизация Azure, под которой я зарегистрировала свое веб-приложение, может войти в систему.

Другие пользователи организации не могут войти в систему. Я получаю следующее сообщение об ошибке:

2019-11-11 10:16:35 default[20191109t101750]  InternalOAuthError: failed to fetch user profile
2019-11-11 10:16:35 default[20191109t101750]      at /srv/node_modules/passport-microsoft/lib/strategy.js:86:29
2019-11-11 10:16:35 default[20191109t101750]      at passBackControl (/srv/node_modules/oauth/lib/oauth2.js:132:9)
2019-11-11 10:16:35 default[20191109t101750]      at IncomingMessage.<anonymous> (/srv/node_modules/oauth/lib/oauth2.js:157:7)
2019-11-11 10:16:35 default[20191109t101750]      at IncomingMessage.emit (events.js:203:15)
2019-11-11 10:16:35 default[20191109t101750]      at IncomingMessage.EventEmitter.emit (domain.js:466:23)
2019-11-11 10:16:35 default[20191109t101750]      at endReadableNT (_stream_readable.js:1145:12)
2019-11-11 10:16:35 default[20191109t101750]      at process._tickCallback (internal/process/next_tick.js:63:19)

Вы можете прочитать мой предыдущий вопрос для справки здесь

1 Ответ

0 голосов
/ 12 ноября 2019

Регистрация приложения в качестве мультитенанта и получение согласия администратора для собственного арендатора недостаточно.

Вам необходимо дать согласие администратора для этого приложения Multi-Tenant Azure AD в отношении других арендаторов.

Чтобы предоставить согласие администратора с помощью URL-запроса:

Создайте запрос для login.microsoftonline.com с настройками вашего приложения и добавьте &prompt=admin_consent.

Этот URL будет выглядеть следующим образом: https://login.microsoftonline.com/<tenant-id of other tenant>/oauth2/authorize?client_id=<client id>&response_type=code&redirect_uri=<redirect URI>&nonce=1234&resource=https://graph.microsoft.com&prompt=admin_consent

После входа с учетными данными администратора другого арендатора приложению было предоставлено согласие для всех пользователей этого арендатора.

...